将NSMutableArray保存到Core Data

21

我想在我的Core Data模型中的一个实体中添加一个NSStrings的NSMutableArray。但问题是这不是Core Data支持的类型。

我尝试创建一个可转换的属性,但问题在于我没有找到将NSMutableArray转换为NSData,再从NSData转换回NSMutableArray的方法。是否有人有解决此问题的想法?

(我知道我可以对数组进行归档,但我不想这样做,我希望它存在于我的模型中)。

1个回答

33

您可以在建模对象中使用二进制数据属性,将数组存档为数据,然后将其交给对象。

但我认为更好的方法是使用一对多关系,而不是直接使用数组。

****编辑:以下是将数组存档到NSData中以便在托管对象中使用的方法***

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

基本上,任何符合 NSCoding 协议的类都可以以这种方式进行归档。NSArray/NSMutableArray 已经符合该协议。它们告诉它们所有的对象去归档自己,所以它们也必须符合。而且所有这些对象的成员都必须符合,以此类推。就像一棵树。

由于您的数组符合要求,并且它是一个包含 NSString 的数组(NSString 也符合要求),所以您非常幸运。


1
但是这里我们有一个简单字符串的数组 - 您是否需要将每个字符串包装在托管对象中,或者是否已经有任何类型的薄NSManagedObject包装器可用于NSString? - Kendall Helmstetter Gelner
如何将字符串数组转换为数据?(我找到了一个解决此问题的方法,它不涉及使用字符串数组,但我仍然对解决方案很感兴趣) - gburgoon
9
相反的操作是NSArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData]; - Resh32
正确的方法是创建另一个实体表,并在这两个实体之间添加关系!我认为对于存档和取消存档数组来说,这是浪费时间。 - flypig
为什么添加另一个实体表并建立关联是“更好”的?因为这样做很明确吗? - huggie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接