Ios 如何一次更改核心数据中所有实体的属性值?
我正在构建具有“清单”功能的应用程序。检查表项存储为核心数据实体。数据模型中还有一个“checked”属性存储为Ios 如何一次更改核心数据中所有实体的属性值?,ios,core-data,nsfetchrequest,nsfetchedresultscontroller,Ios,Core Data,Nsfetchrequest,Nsfetchedresultscontroller,我正在构建具有“清单”功能的应用程序。检查表项存储为核心数据实体。数据模型中还有一个“checked”属性存储为BOOL。处理此检查表功能的视图控制器基于UITableViewController 基本上,我想实现UIRefreshControl,它允许用户重置核心数据中所有检查表实体的“已检查”状态。例如,一旦用户下拉UITableView,所有项目都将重置并显示为“未选中” 但是,NSFetchedResultsController一次只能通过[fetchedResultsControlle
BOOL
。处理此检查表功能的视图控制器基于UITableViewController
基本上,我想实现UIRefreshControl
,它允许用户重置核心数据中所有检查表实体的“已检查”状态。例如,一旦用户下拉UITableView
,所有项目都将重置并显示为“未选中”
但是,NSFetchedResultsController
一次只能通过[fetchedResultsController objectAtIndexPath:indexPath]
访问一个实体。是否有办法从核心数据中获取整个实体集合,如NSArray
或NSDictionary
,因此我可以枚举所有实体并更改其“checked”属性 对您的任务来说很好
在这种情况下,也不需要使用
NSFetchedResultsController
,只需简单的操作即可。同意coverback…假设您希望从名为“Test”的实体中提取所有对象:
fetchObjects数组包含“Test”实体中的所有对象我需要更新很多实体,因此使用
NSFetchRequest
的解决方案速度太慢。幸运的是,苹果在iOS 8中添加了NSBatchUpdateRequest
。下面是一个简单的例子:
NSBatchUpdateRequest *batchUpdate = [[NSBatchUpdateRequest alloc] initWithEntityName:@"EntityName"];
batchUpdate.propertiesToUpdate = @{ @"attribute": @(0) };
batchUpdate.resultType = NSBatchDeleteResultTypeStatusOnly;
[managedObjectContext executeRequest:batchUpdate error:nil];
这里有一篇关于这个主题的好博文:。谢谢。我专注于使用NSFetchedResultsController,但忘记了可以通过managedObjectContext本身直接获取所有对象。然后可以在数组上调用
makeObjectsPerformSelector:withObject:
。但是如果数组中有很多对象,这可能需要一段时间。
NSBatchUpdateRequest *batchUpdate = [[NSBatchUpdateRequest alloc] initWithEntityName:@"EntityName"];
batchUpdate.propertiesToUpdate = @{ @"attribute": @(0) };
batchUpdate.resultType = NSBatchDeleteResultTypeStatusOnly;
[managedObjectContext executeRequest:batchUpdate error:nil];