0

我正在构建具有“清单”功能的应用程序。清单项目存储为核心数据实体。数据模型中也存储了一个“已检查”属性BOOL。处理此清单功能的视图控制器基于UITableViewController.

基本上,我想实现UIRefreshControl允许用户重置核心数据中所有清单实体的“已检查”状态。例如,一旦用户拉下UITableView.

但是,NSFetchedResultsController一次只提供对一个实体的访问权限[fetchedResultsController objectAtIndexPath:indexPath]。有没有办法从核心数据中获取整个实体集合,NSArray或者NSDictionary因此我可以枚举所有实体并更改它们的“已检查”属性?

4

3 回答 3

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 数组包含“测试”实体中的所有对象

于 2013-02-18T12:46:04.223 回答
0

[fetchedResultsController fetchedObjects]会很好地完成你的任务。

在这种情况下它也不需要使用NSFetchedResultsController,你可以简单地逃脱NSFetchRequest

于 2013-02-18T12:38:23.297 回答
0

我需要更新很多实体,所以使用的解决方案NSFetchRequest太慢了。幸运的是,AppleNSBatchUpdateRequest在 iOS 8 中添加了。这是一个简单的示例:

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/ 。

于 2016-06-03T09:22:15.797 回答