是否有办法通过一个SQL-查询运行某个实体的所有对象的更新?不是去取和跑-循环。
例如,喜欢运行
UPDATE someEntity SET filed1 = value1 WHERE field2 = value2发布于 2015-06-20 05:50:19
Mercelo的答案在iOS-7中是行不通的,你可以
NSFetchRequest *fetchAllRSSItems = [NSFetchRequest fetchRequestWithEntityName:[RSSItem entityName]];
NSError *fetchError;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchAllRSSItems error:&fetchError];
if (results == nil) {
NSLog(@"Error: %@", [fetchError localizedDescription]);
} else {
for (RSSItem *rssItem in results) {
rssItem.read = [NSNumber numberWithBool:YES];
}
[self saveManagedObjectContext];
}发布于 2014-07-25 12:35:59
在iOS 8上引入了核心数据批处理更新:
NSBatchUpdateRequest *batchRequest = [NSBatchUpdateRequest batchUpdateRequestWithEntityName: [RSSItem entityName]];
batchRequest.propertiesToUpdate = @{NSStringFromSelector(@selector(read)): @YES};
batchRequest.resultType = NSStatusOnlyResultType; // NSStatusOnlyResultType is the default
batchRequest.affectedStores = @[...]; // Optional, stores this request should be sent to
batchRequest.predicate = [NSPredicate predicateWithFormat:@"..."]; // Optional, same type of predicate you use on NSFetchRequest
NSError *requestError;
NSBatchUpdateResult *result = (NSBatchUpdateResult *)[self.managedObjectContext executeRequest:batchRequest error:&requestError];
if (result) {
// Batch update succeeded
} else {
NSLog(@"Error: %@", [requestError localizedDescription]);
}但是,它不更改上下文:它直接更改持久存储。这意味着不需要进行验证,之后需要更新UI。
这个答案是基于马修·莫雷的这篇文章的。
https://stackoverflow.com/questions/24955709
复制相似问题