2015-08-17 91 views
1

我有三個控制器,一個顯示所有數據,第二個視圖刪除項目,第三個編輯。除了刪除NSManagedObject之外,所有的工作都很好,目前該應用程序崩潰的錯誤是;刪除NSManagedObject時出錯

無法識別的選擇發送到實例0x7f945b56a680 2015年8月17日 18:35:08.835 AppTest [8008:435289] ***終止應用程序由於未捕獲 異常 'NSInvalidArgumentException',原因: 「 - [的NSManagedObjectContext刪除:]:無法識別的選擇發送到 實例...類型NSException的未捕獲的異常 (LLDB)

爲什麼發生這個錯誤,以及如何終止我可以UINavigationController和popToRootContro內刪除NSManagedObject ller繼續回到collection view

繼承人我一直試圖做的editViewController;

let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

@IBAction func remove(sender: AnyObject) { 

    context?.delete(self.selectedObject) 

    var error: NSError? 
    context?.save(&error) 

    self.navigationController?.popToRootViewControllerAnimated(true) 

} 

更新:我沒有使用popToRootViewController方法的問題,但使用delete方法,它應該已經deleteObject()。現在我知道我看到的問題上有很多問題。

+3

我不知道,這個編譯的。 NSManagedObjectContext沒有'delete()'方法,只有'deleteObject()'。 –

+2

實際上'delete'方法是[UIResponderStandardEditActions](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIResponderStandardEditActions_Protocol/index.html)協議的一部分,它被定義爲「NSObject」類別(「非正式協議」)。這解釋了代碼編譯的原因。 「 –

回答

3

你想要deleteObject()而不是delete(),因爲delete是NSObject上的一個未實現的擴展。

你的代碼應該是:

context?.deleteObject(self.selectedObject as NSManagedObject)

+0

」... delete是NSObject上的基礎級函數。「不。當然,如果這是真的,那麼無法識別的選擇器異常不會首先被拋出。 – jlehr

+0

我將其更改爲「未實現的擴展名」。將來,如果您發現語言不符合您的喜好,請提出修改建議 - 您的聲譽綽綽有餘,可以改善帖子的語言。 –