2011-09-25 97 views
0

我已經在AppDelegate中創建一個簡單的函數來將一些數據存儲在數據庫(CoreData)中,這將從各個ViewController類中調用,這些類連接了do AppDelegate。這是該函數的主體:CoreData(存儲新對象)在AppDelegate = SIGABRT

- (void) setSetting:(NSString *)setting :(NSString *)value {  
    NSManagedObject* newSetting = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:self.managedObjectContext]; 
    [newSetting setValue:value forKey:setting]; 
    NSError* error; 
    [self.managedObjectContext save:&error]; 
} 

但是在調用這個函數(甚至從AppDelegate中本身)返回SIGABRT上符合setValue

但是,當我在ViewController類實現功能(帶有正確的連接代替self.AppDelegate當然) - 它的工作原理罰款

我不明白,我真的很感謝在AppDelegate中創建靈活功能的一些幫助來保存數據庫中的數據。

+0

是你的實體真的叫做「EntityName」? – Rog

+0

你在應用程序委託中有'setting'屬性嗎? – TechZen

+0

@Rog:這只是一個例子。 – Heps

回答

1

這看起來有點像key部分不是NSStringvalue部分是不正確的數據類型。請檢查,並可能使您的功能中的參數順序與setValue:forKey方法相同,以避免混淆。

此外,根據documentation,如果未在模型中定義key,則會發生異常 - 請仔細檢查您的關鍵字符串。

順便說一句,如果這是你的錯誤,最好離開KVC,並創建自己的NSManagedObject子類作爲一種習慣 - 讓生活變得更容易。

+0

謝謝您的回覆,但它沒有解決問題。鍵和值都是NSString以及實體屬性。沒有任何異常可見(或者我不知道如何查看它們)。在控制檯中只有SIGABRT沒有大膽的註釋:/ – Heps

+0

邏輯規定,功能與從另一個控制器調用它時必須有所不同。這可能是您的託管對象模型未正確初始化;你的'managedObjectContext'是零;和這樣的事情。 'NSLog'有問題的所有變量,你應該找到問題。 – Mundi

0

最可能的解釋是,這條線:

NSManagedObject* newSetting = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:self.managedObjectContext]; 

...返回nil對象要麼是因爲實體名稱不正確,或者因爲managedObjectContext本身是零或無效。

由於該問題只出現在應用程序代理中,因此我首先會懷疑self.managedObjectContext存在一些問題。