2010-09-14 24 views
0

我有一個在我的AppDelegate類中創建的MOC。我在我的RootView這是由AppDelegate中的東西,如設置MOC屬性:ManagedObjectContext在保存後似乎改變,不能被其他一些ViewController改變

rootView.managedObjectContext = self.managedObjectContext; 

這rootView創建在一段時間ModalView,並設置有一個MOC財產也被以同樣的方式。

一切工作正常。我可以創建新的託管對象,視圖可以訪問它們並將其刪除。

直到我做了一個[self.managedObjectContext save:&error](在AppDelegate類中,當應用程序移入後臺)時。 [self.managedObjectContext deleteObject:managedObject]

應用崩潰:

在此之後,如果我在rootView創建一個新的管理對象,我無法通過模式的看法的東西,如刪除這個新對象。有時我在控制檯中出現瞭如下錯誤消息:NSManagedObjectContext無法刪除其他上下文中的對象。

因此,似乎在保存MOC改變之後。

發生了什麼,我錯過了什麼。

我正在使用iOS 4.1。

THX和歡呼聲,

+0

我們可能將不得不看到你創建上下文的代碼,分配和創建一個被拒絕的對象。 – TechZen 2010-09-14 11:58:26

回答

0

不能告訴太多沒有代碼,但我可以根據您的描述胡亂猜測。

如果您在應用程序委託中爲managedObjectContext屬性創建了上下文(如果它爲零)的自定義getter方法,那麼您可能已將其搞亂,導致存取器每次都會生成新的上下文。

例如,Xcode的模板存取的樣子:

- (NSManagedObjectContext *) managedObjectContext { 

    if (managedObjectContext != nil) { 
     return managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator: coordinator]; 
    } 
    return managedObjectContext; 
} 

如果你沒有類似的東西,但忽略了對現有情況下的考驗,你會得到一個新的上下文每次self.managedObjectContext被調用。

+0

現在我無法得到我的代碼。我將在當天晚些時候發佈更多內容。但我知道我在我的getter方法中測試了現有的managedObjectContext。我可以多次訪問managedObjectContext,沒有任何問題。我保存上下文後出現錯誤。並且僅限於保存後添加的managedObjects。 – 2010-09-14 15:00:45

0

好的,所以這真的很奇怪:兩天前,由於MOC問題,我退出了該項目的工作。昨天傍晚,我開始重新開始工作。我完全沒有改變任何代碼,只是想重現錯誤來調試它。什麼發生?錯誤沒有再出現。因此,似乎重新啓動計算機「解決」了問題。從那時起,即使經過數小時的工作和測試,錯誤再也沒有發生過。

無論如何非常感謝您的幫助。

再見,