Bra*_*son 13
如果您将在表视图中显示只读数据,那么仅仅由于NSFetchedResultsController,使用Core Data而不是SQLite会有很大的优势.这个便捷类使得在表视图中显示数据库元素变得非常容易,并且它可以为您处理批量提取.批量提取允许您仅在屏幕上加载所需的信息,从而显着改善除最小数据集之外的所有数据集的加载时间和内存使用情况.
由于这个原因,我将Core Data用于我在应用程序包中提供的只读信息,以及我可以与存储在用户应用程序数据中的可写数据库共享数据模型的事实.我的建议是使用Core Data,除非您绝对需要定位iPhone OS 2.x设备.
Ros*_*one 10
这是使用plist预加载Core Data存储的简单方法.
创建包含字典数组的属性列表.使每个字典的键对应于托管对象的键.
alt text http://www.freeimagehosting.net/uploads/b0b1909e81.png
然后,在应用程序第一次启动时调用此方法:
- (void)loadDataFromPropertyList {
NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"];
NSArray *items = [NSArray arrayWithContentsOfFile:path];
NSManagedObjectContext *ctx = self.managedObjectContext;
for (NSDictionary *dict in items) {
NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx];
[m setValuesForKeysWithDictionary:dict];
}
NSError *err = nil;
[ctx save:&err];
if (err != nil) {
NSLog(@"error saving managed object context: %@", err);
}
}
Run Code Online (Sandbox Code Playgroud)
loadDataFromPropertyList通过在以下实施中包含以下代码,第一次启动应用程序时调用application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
{
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self loadDataFromPropertyList];
}
Run Code Online (Sandbox Code Playgroud)