Ios 如何一次更改核心数据中所有实体的属性值?

Ios 如何一次更改核心数据中所有实体的属性值?,ios,core-data,nsfetchrequest,nsfetchedresultscontroller,Ios,Core Data,Nsfetchrequest,Nsfetchedresultscontroller,我正在构建具有“清单”功能的应用程序。检查表项存储为核心数据实体。数据模型中还有一个“checked”属性存储为BOOL。处理此检查表功能的视图控制器基于UITableViewController 基本上,我想实现UIRefreshControl,它允许用户重置核心数据中所有检查表实体的“已检查”状态。例如,一旦用户下拉UITableView,所有项目都将重置并显示为“未选中” 但是,NSFetchedResultsController一次只能通过[fetchedResultsControlle

我正在构建具有“清单”功能的应用程序。检查表项存储为核心数据实体。数据模型中还有一个“checked”属性存储为
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];