2010-02-14 43 views
1

如果用戶沒有最終修改新條目(這發生在插入操作上),則以下代碼將刪除核心數據對象。根視圖控制器創建實體並傳遞給我的視圖的引用。如果用戶在我的視圖上點擊「完成」按鈕,它會正常工作,但如果他們使用導航欄上的「後退」按鈕向後導航,則它返回的根視圖將永遠掛起。在從UINavigationController彈出視圖之前刪除核心數據對象

我在做什麼明顯錯誤?我已經考慮過等待創建實體,直到用戶完成視圖爲止,但是將來這個視圖還將處理編輯現有實體的操作,所以我最好將當前實體傳遞給此視圖的方法。

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    // If the baby has no name, delete the Baby object that the root view 
    // already created. Otherwise save it. 
    NSManagedObjectContext *context = self.baby.managedObjectContext; 

    if ([self.babyNameField.text length] == 0) 
     [context deleteObject:baby]; 

    // Save 
    NSError *error = nil; 
    if (![context save:&error]) { 
     // unresolved jmu - handle error 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]);  
    } 

} 
+0

你在哪兒分配'寶貝'?你可以發佈當控制檯崩潰時顯示的消息嗎? – FelixLam 2010-02-14 16:45:27

回答

0

這是一種常用的方法,這段代碼看起來很好。

你在上面設置了一個斷點,然後走過來確認?您需要調試並追蹤代碼所在的位置。

+0

感謝您告訴我這是一個完成此任務的標準方法。我完成了它,並且該方法完成而沒有錯誤。如果我在調試器掛起之後再打開調試器,那麼堆棧中真的沒有什麼有趣的東西(至少不是iPhone新手): mach_msg_trap - > mach_msg - > CFRunLoopRunSpecific - > ... – 2010-02-14 23:38:09

+0

啊。新手。我沒有打開控制檯窗口。它沒有被掛起,它停止了一個例外「CoreData無法完成錯誤」。我必須做一些其他的事情,所以我回來的視圖沒有參考我刪除的實體... – 2010-02-14 23:58:44

+0

我能夠解決這個問題,雖然它是一種解決方法。代碼從一個教程開始,在創建新視圖之前,實體被保存。我刪除了該代碼,因爲我現在在新視圖關閉時保存它。由於我現在不再保存在根視圖中,任何持有對該新實體的引用的引用都不會得到它,並且不會再引起問題。我仍然想知道它是什麼。我猜這是根視圖中的表格視圖,但我無法確定它是否固定下來。 – 2010-02-15 00:37:12

相關問題