仍在使用我的RSS閱讀器。爲什麼我的NSManagedObject在[moc保存] PerformBlockAndWait後沒有保存?
我的數據模型大致由以下NSManagedObject
層次:
Category <---->> Feed <---->> Post
我的應用程序使用以下:
「根」
NSManagedObjectContext
與NSPrivateQueueConcurrencyType
併發類型。我使用這個MOC來堅持我對NSPersistentStoreCoordinator
的更改。「主」
NSManagedObjectContext
與NSMainQueueConcurrencyType
併發類型。我使用這個MOC來提供我的GUI。「本地」
NSManagedObjectContext
與NSPrivateQueueConcurrencyType
併發類型。每次我批量提取新的Posts對象時,我都會創建並使用這個MOC。
一旦載入MainViewController
,它會自行填充(如果爲空)。
在populate
方法的末尾,我要確保一切都正常持續存在,也重新獲取我的數據:
[_mainMOC performBlockAndWait:^{
NSError *error;
if (![_mainMOC save:&error]) {
NSLog(@"[MainViewController::populate] Error.mainMOC: %@\n%@", [error description], [error userInfo]);
}
[[_mainMOC parentContext] performBlockAndWait:^{
NSError *error;
if (![[_mainMOC parentContext] save:&error]) {
NSLog(@"[MainViewController::populate] Error.saveMOC: %@\n%@", [error description], [error userInfo]);
}
}];
NSLog(@"[MainViewController::populate] OK.saveMOC");
}];
NSLog(@"[MainViewController::populate] OK.mainMOC");
[_mainMOC performBlock:^{
NSError *error;
if (![_mainMOC executeFetchRequest:[_fetchedResultsController fetchRequest] error:&error]) {
NSLog(@"[MainViewController::populate] refetch: %@\n%@", [error description], [error userInfo]);
}
}];
儘管這樣,在一個專用的`我無法將Feed
秒鐘內創建Post
小號localMOC`` :
NSManagedObjectID *feedID=[f objectID];
if ([feedID isTemporaryID]) {
NSLog(@"Warning %@ has not yet been persisted!", f.name);
}
/* ... */
NSManagedObjectContext *localMOC;
localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[localMOC setParentContext:self.mainMOC];
/* ... */
[localMOC performBlock:^{
NSError *error=nil;
Feed *feed=((Feed *)[localMOC existingObjectWithID:feedID error:&error]);
if (error) {
NSLog(@"[MAsterViewController::fetchPosts] %@\n%@", [error localizedDescription], [error userInfo]);
return;
}
/* ... */
上面的代碼位生成以下日誌:
2013-11-14 19:24:04.847 uRSS[10907:70b] Warning Maddox has not yet been persisted!
2013-11-14 19:24:04.847 uRSS[10907:1303] [MAsterViewController::fetchPosts] The operation couldn’t be completed. (Cocoa error 133000.)
有人能告訴我這裏有什麼問題嗎? 謝謝!
你好,*非常感謝您的幫助。所以我想我的多個''performBlockAndWait ... save''塊沒有任何作用? – mirx
由於'local'上下文沒有保存,並且無法更改對象,所以沒有。但對「main」上下文所做的所有更改都將保留。 –