21

I want to add an NSMutableArray of NSStrings to one of my Entities in my core data model. The problem is that this isn't a supported type in Core Data.

I tried making a tranformable attribute, but the problem is that I see no way of turning a NSMutableArray to NSData, and then going from NSData, back to an NSMutableArray. Does anyone have an idea as to how this issue can be solved?

(I know I can archive the array, but I don't want to do that, I want it to be present in my model).

1 Answer 1

33

You could have a binary data attribute in your modeled object, archive the array to data, and hand it off to the object.

But I think the better way would be to have a to-many relationship, instead of using an array directly.

****Edit: Here's how to archive the array into NSData so that it can be used in your managed object***

NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:@"1",@"2", nil]];

Basically, any class you have which conforms to the NSCoding protocol can be archived in this way. NSArray/NSMutableArray already conform to it. They tell all of their objects to archive themselves, so they must conform too. And all of those objects' members must conform, etc. It's like a tree.

Since your array conforms, and it's an array of NSString (which also conforms), then you're golden.

Sign up to request clarification or add additional context in comments.

5 Comments

But here we have an array of simple strings - would you have to wrap each string in a managed object, or is there any kind of thin NSManagedObject wrapper around NSString already available?
How to you turn the array of strings to data?? (I found a workaround for this issue that involved me not having to use an array of strings, but I'm still curious for a solution)
The opposite is NSArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData];
The correct way is to create another entity table, and add a relationship between these two entities! I think it is a waste of time for archiving && unarchiving the array.
Why is that adding another entity table and having the relationship is "better"? Is it because it's explicit?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.