在Core Data中将数组存储为NSData的替代方法

时间:2013-12-09 03:06:58

标签: ios core-data nsdata

我有一个非常小的轻量级应用程序,它使用核心数据将数组存储为NSData。我已经读到这是不好的做法,因为从长远来看它会变得臃肿。但有哪些替代方案?创建一个plist并将数据存储在磁盘上是否更好?

目前我没有看到任何戏剧性的性能点击我的应用程序,但我想在我吃帽子之前把它扼杀在萌芽状态。

2 个答案:

答案 0 :(得分:1)

你是对的,这是一种存储数据的完全错误的方法,因为Core Data为您提供了一个高级的面向对象的存储,尝试在心理上定义您存储的数据类型,并基于此构建数据模型。

如果你考虑过这种方法,但不确定你是否能够正确构建它,我建议你从这个CoreData教程开始http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started

答案 1 :(得分:1)

如果您决定坚持使用核心数据

如果数组中填充了Foo对象,则创建一个名为Foo的Core Data实体。为Foo实体提供displayOrder属性,该属性在假设数组中跟踪其索引。

当您的应用需要在表格视图中显示所有Foo对象时,请按如下方式从Core Data中获取Foo对象:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

[request setEntity:[NSEntityDescription entityForName:@"Foo" inManagedObjectContext:self.context]];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"displayOrder" ascending:YES];
[request setSortDescriptors:@[sort]];

NSArray *results = [self.context executeFetchRequest:request error:NULL];

这种方法的缺点是,如果更改数组中单个Foo对象的顺序,则可能必须更新Core Data中所有Foo对象的displayOrder。但是你可以聪明地做到这一点,并尽量减少这些更新。例如,在向数组添加新的Foo对象时,将Foo对象添加到数组的末尾;这样,Core Data中没有Foo对象需要更新displayOrder。