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