我正在尝试创建从未知(可能很大)对象的属性中收集的NSSet
个字符串。
我的应用用户在月内记录对象 - 他们有不同的属性,我只对NSString *category
名称感兴趣。
Object.h
NSString *category
...
在一个月内,他可以记录10到1000个这样的对象,存储在coredata中。用户可以定义自己的类别 - 我必须找出在该月份使用的类别(以创建导出文件)。
目前我执行以下操作(伪代码)
NSArray *allObjects = [_dataHandler fetchAllObjectsForMonth:monthToExport];
NSMutableSet *allCategoryNamesSet = [[NSMutableSet alloc]init];
for(Object *obj in allObjects){
[allCategoryNamesSet addObject:obj.category];
}
Wheras这个有效,但是很多对象变得非常慢,因为提取需要花费时间和迭代。
我也尝试过类似的东西:
NSArray *categories = [allObjects valueForKeyPath:@"category"];
NSSet *allCategorieNamesSet = [NSSet initWithArray:categories];
也许我做错了什么,但它没有起作用:/
我感兴趣的是,如果有一个可以显着加快这个过程的解决方案吗?我可能忽略了一些东西。
有什么想法吗?
答案 0 :(得分:3)
如果您只对category
属性的(不同)值感兴趣,请设置
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:@[@"category"]];
[request setReturnsDistinctResults:YES];
用于获取请求。然后,获取请求返回包含category
值的字典数组(而不是托管对象)。
优点是这个“过滤”是在SQLite级别完成的。一个缺点(或“警告”)是这意味着setIncludesPendingChanges:NO
,即获取请求仅针对已保存的数据库进行,并且不包括未保存的待定修改。
答案 1 :(得分:1)
Checkout MagicalRecord,这是一个使用Core Data的便利库。这应该可以帮助你完成很多这些任务。
祝你好运。