是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?

Posted

技术标签:

【中文标题】是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?【英文标题】:Is it possible to save an NSMutableArray with NSKeyedArchiver into Core Data? 【发布时间】:2017-04-12 23:08:24 【问题描述】:

我的项目中有 2 个 NSMutableArrays,并被告知由于 Core Data 不支持 NSMutableArray,我必须使用 NSKeyedArchiver 对其进行归档和取消归档才能将其保存到 Core Data。我已经为我的 tableview 实现了一个 NSFetchResultsController,我将如何将 NSMutableArray 保存在 NSKeyedArchiver 中,然后在 Core Data 中使用它?我将在我的数组和 NSKeyArchiver 下方发布一些代码。

- (instancetype)init 
    self = [super init];
    if (self) 
    self.nameList = [NSMutableArray arrayWithObjects:@"1",
                                                   @"2",
                                                   @"3",
                                                   @"4",
                                                   @"5",
                                                   nil];


   self.descArray = [NSMutableArray  arrayWithObjects:@"desc1",
                                                      @"desc2",
                                                      @"desc3",
                                                      @"desc4",
                                                      @"desc5",
                                                      nil];
                   
    return self;


// How arrays are archived
NSData *titleData = [NSKeyedArchiver archivedDataWithRootObject: self.nameList];

.... //Not sure what to do with the archived data

NSData *descData = [NSKeyedArchiver archivedDataWithRootObject: self.descArray];

....

既然这两个数组已归档,我将如何处理它们?以后如何添加?

我的核心数据模型很简单,它是一个名为“数据”的实体,有两个字符串类型的属性,称为“标题”和“描述”。这2个属性用于存储数组。

我对这个项目的希望是允许用户在已经构成单元格的现有数据之上向 tableview 添加新对象,我希望在 Core Data 中完成。我知道 NSFetchResultController 但无法将所有这些整合在一起以使其正常工作,欢迎任何帮助引导我朝着正确的方向前进

【问题讨论】:

看起来你应该拥有一个具有namedescription 属性的Core Data 实体,然后在Core Data 中创建一些这样的对象 【参考方案1】:

您可以将不可变数据保存在核心数据中。之后你可以通过 NSKeyedArchiver 将可变变为不可变。与 NSUserDefaults 相同。

【讨论】:

func getDataFromArray(arrayData:NSArray?) -> NSData return NSKeyedArchiver.archivedDataWithRootObject(arrayData!)

以上是关于是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 NSKeyedArchiver 来存储动画 UIImage?

使用 NSKeyedArchiver 解码然后编码未知类?

NSData 从 NSKeyedArchiver 到 NSString

如何将 UIDocumentPickerViewController 导入限制为 .archive 文件? (NSKeyedArchiver)

NSKeyedArchiver 线程安全吗?

NSKeyedArchiver 和 NSKeyedUnarchiver 与 NSMutableArray