Coy*_*Coy 7 iphone managed core-data objective-c
我用谷歌搜索和研究,但无法找到迭代我的数据模型中的所有或一些托管对象的最佳方法,并更新每个托管对象的属性值,在我的情况下,更新到当前日期.托管对象上下文和持久性存储委托方法都在我的Application Delegate中.我可以在程序的表视图中添加一些代码,但我觉得调用方法来更新这些值会更有效,因为它们可能不一定返回到表视图.
最终,我希望在我的应用程序的任何位置循环遍历我的托管对象并更新值.
如果您需要更多信息,请与我们联系.谢谢!
-COY
ImH*_*its 11
根据要更新值的内容,可以获取对象数组并在数组上调用setValue:forKey :,这将设置数组中每个对象的值.例如:
//fetch managed objects
NSArray *objects = [context executeFetchRequest:allRequest error:&error];
[objects setValue:newValue forKey:@"entityProperty"];
//now save your changes back.
[context save:&error];
Run Code Online (Sandbox Code Playgroud)
设置获取请求应该只需要你想要的实体,保留谓词为零,这样你就可以获得所有实例.
从iOS 8和OS X 10.10(Yosemite)开始,Apple在Core Data中添加了一个用于执行批量更新的新类:NSBatchUpdateRequest.它比使用a的解决方案更有效NSFetchRequest,特别是在处理大量数据时.这是一个基本的例子:
NSBatchUpdateRequest *batchUpdate = [[NSBatchUpdateRequest alloc] initWithEntityName:@"EntityName"];
batchUpdate.propertiesToUpdate = @{ @"attribute": @(0) };
batchUpdate.resultType = NSStatusOnlyResultType;
[managedObjectContext executeRequest:batchUpdate error:nil];
Run Code Online (Sandbox Code Playgroud)
这里有一篇关于这个主题的好文章:https://www.bignerdranch.com/blog/new-in-core-data-and-ios-8-batch-updating/.
更新多个对象的唯一方法是拥有所有这些对象.由于Core Data不是数据库,因此无法像在SQL中那样使用Core Data进行"批量更新" .它是一个对象图持久性框架,这意味着您将处理对象.
您可以采取一些措施来降低内存使用率(例如批量获取请求并仅获取某些属性),但最终您将使用循环并逐个更新对象.