我想我理解錯誤消息:CoreData無法履行錯誤,但我不知道該如何處理它。當HTTP服務更新對象時,CoreData無法完成故障
我們有一個應用程序,我們使用Core Data來保存從JSON服務返回的數據。今天我正在做以下事情。
- 從持久性存儲中獲取本地對象,並返回到UI
- 詢問服務器如果對象被更新 - 當我得到的答案,我更新了核心數據管理對象
- 更新UI與更新的對象
問題是;即使我不使用多線程,當HTTP請求刪除我的UI保留的託管對象時,我有時也會收到錯誤。我試圖用returnsObjectsAsFaults將對象提取爲NO。我想我可以訪問所有的管理對象的關係和屬性,即使它被刪除了(只要我的用戶界面保留了它)。
我應該如何解決這個問題?
我想我可以使用單獨的NSManagedObjectContext進行讀取和寫入。我做了這個測試:
MyAuthorMO *authorUpdate = [[MyAuthorMO alloc] init]; // I have made this init insert the object into the updateContext
authorUpdate.firstname = @"Hans";
authorUpdate.lastname = @"Wittenberg";
authorUpdate.email = @"[email protected]";
NSManagedObjectContext *updateContext = [[MyCoreManager getInstance] managedObjectContext];
NSError *error = nil;
[updateContext save:&error];
NSManagedObjectContext *readContext = [[MyCoreManager getInstance] readOnlyContext];
NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:@"authorByEmail" substitutionVariables:[NSDictionary dictionaryWithObject:@"[email protected]" forKey:@"EMAIL"]];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSArray *authors = [readContext executeFetchRequest:fetchRequest error:&error];
MyAuthorMO * readAuthor = [authors objectAtIndex:0];
// Delete the author with update context:
[updateContext deleteObject:authorUpdate];
[updateContext save:&error];
NSLog(@"Author: %@ %@, (%@)", readAuthor.firstname, readAuthor.lastname, readAuthor.email);
只要我使用readContext進行讀取,日誌輸出就好了。如果我使用updateContext進行提取,我會得到一個異常。這看起來很有前途,但恐怕我會在後期遇到問題。遲早我可能會嘗試訪問一個不完全提取的屬性(一個錯誤)。我如何實現我正在尋找的行爲?
尼克,你可能是對的。我已閱讀我以前的帖子並接受了最佳解決方案。謝謝你的評論。 – Andi 2010-09-10 06:11:52