是否有方法通過一個SQL查詢運行某個實體的所有對象的更新? 不能獲取和運行循環。批量更新iOS 7中的數據CoreData
例如喜歡跑
UPDATE someEntity SET filed1 = value1 WHERE field2 = value2
是否有方法通過一個SQL查詢運行某個實體的所有對象的更新? 不能獲取和運行循環。批量更新iOS 7中的數據CoreData
例如喜歡跑
UPDATE someEntity SET filed1 = value1 WHERE field2 = value2
Mercelo的回答不會爲iOS7工作,爲此,您可以
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];
}
核心數據批量更新引入了在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]);
}
但是,它並沒有改變背景:它直接改變了持久性存儲。這意味着沒有進行驗證,您需要更新您的用戶界面後。
這個答案是根據this post by Matthew Morey。
將在iOS7設備這項工作? –
我遇到了一個問題,其中result和requestError都是零....並且executeRequest:error:沒有記錄... wat do – Skyler
是的,但是這會將所有對象都帶入內存! –
是的,這是真的,但如果你正在尋找向後兼容的答案,你可以使用這個答案。 –