我正在构建具有“核对表”功能的应用程序。核对表项目存储为核心数据实体。在“数据模型”中还有一个“已检查”属性存储为BOOL
。处理此核对表功能的视图控制器基于UITableViewController
。
基本上,我想实现UIRefreshControl
,允许用户重置核心数据中所有核对表实体的“已检查”状态。例如,一旦用户下拉UITableView
,所有项目都将被重置并显示为“未选中”。
但是,NSFetchedResultsController
仅通过[fetchedResultsController objectAtIndexPath:indexPath]
一次提供对一个实体的访问权限。是否有办法将核心数据中的整个实体集合作为NSArray
或NSDictionary
,因此我可以枚举所有实体并更改其“已检查”属性?
答案 0 :(得分:1)
同意coverback ...假设你想从名为“Test”的实体中获取所有对象:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test"
inManagedObjectContext:context];
NSError *error;
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
fetchObjects数组包含“Test”实体
中的所有对象答案 1 :(得分:0)
[fetchedResultsController fetchedObjects]
可以很好地完成您的任务。
在这种情况下,也不需要使用NSFetchedResultsController
,您可以使用简单的NSFetchRequest
。
答案 2 :(得分:0)
我需要更新很多实体,因此使用NSFetchRequest
的解决方案太慢了。幸运的是,Apple在iOS 8中添加了NSBatchUpdateRequest
。这是一个简单的例子:
NSBatchUpdateRequest *batchUpdate = [[NSBatchUpdateRequest alloc] initWithEntityName:@"EntityName"];
batchUpdate.propertiesToUpdate = @{ @"attribute": @(0) };
batchUpdate.resultType = NSBatchDeleteResultTypeStatusOnly;
[managedObjectContext executeRequest:batchUpdate error:nil];
这是一篇关于这个主题的好文章:https://www.bignerdranch.com/blog/new-in-core-data-and-ios-8-batch-updating/。