我有一个包含约500个对象的Core Data数据库。这些对象是将被用户查看和修改的'卡片'。当用户修改卡时,名为“groupNumber”的属性将会改变。将数据对象加载到NSArray会导致启动速度缓慢
这些卡在每个组中的顺序是非常重要的,由用户决定。我将数据库对象加载到一个数组中。当用户进行更改时,我使用'title'属性将数组的顺序保存到plist中。
我的问题来了,当应用程序重新启动。我需要按保存的顺序加载组数组。但是,当我使用plist来执行获取请求时,它非常缓慢。
慢的代码是:
// get array from plist sorted by 'title'
NSMutableArray *group1Temp = [plistData objectForKey:@"group1ArrayData"];
for (int i = 0; i < [group1Temp count]; i++) {
// set predicate to 'title' attribute
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", [group1Temp objectAtIndex:i]];
// load filtered database object into temp array
NSArray *temp = [self.vocabDeckArray filteredArrayUsingPredicate:predicate];
[self.group1Array addObjectsFromArray:temp];
}
当这个执行500次,这实在是太慢了。如果我可以将数据库对象的NSArray保存到plist中,那么我不需要执行谓词搜索,但似乎我无法做到这一点。
我在想我的整个方法都是错误的。如何以更快的方式保存/加载数据库对象数组的顺序?将数据库对象加载到数组本身不好的做法?
感谢您的帮助!
我完全按照你所说的做,只是存储一个对象标题数组而不是字典。您为我节省了大量工作,现在应用程序在3秒内加载完毕。非常感谢。 – shohaku 2011-01-06 04:27:03