在覈心數據中,我設置了一個名爲GolferEntity的簡單實體,它包含一個簡單的golferObject(可變形類型)和playerId(字符串)。NSKeyedArchiver釋放時沒有調用它--finishEncoding
- (void)addOrUpdateGolfer:(GolferObject *)feedObj
{
NSLog(@"In add or update Feed");
// get reference to local (stored) golfer item, create it if needed
Golfer *localGolfer = [self golferForId:[feedObj PlayerId]];
if (localGolfer == nil) {
localGolfer = (Golfer *)[NSEntityDescription insertNewObjectForEntityForName:@"GolferEntity" inManagedObjectContext:[self managedObjectContext]];
[localGolfer setPlayerId:[feedObj PlayerId]];
}
// set folder fields
[localGolfer setGolferObj:feedObj];
// apply update
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"%@", [error localizedDescription]);
// return nil;
}
NSLog(@"successfully saved user: %@", [feedObj PlayerId]);
//return localFolder;
}
的代碼是給我一個運行時錯誤曰: * - [的NSKeyedArchiver的dealloc]:警告:釋放的NSKeyedArchiver沒有上過-finishEncoding調用它。 *終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「 - [GolferObject encodeWithCoder:]:無法識別的選擇發送到實例0x4b7520」
- 無論身在何處,我的代碼有我alloc'd的NSKeyedArchiver所以我假設這是由核心數據完成的事情?我的GolferObject也沒有encodeWithCoder方法?我不知道這是從哪裏來的?
您是否正在回溯到 - [NSKeyedArchiver dealloc]警告?在Xcode上設置一個斷點 - [NSKeyedArchiver dealloc],這樣你就可以看到調用的起源。 – bneely 2012-02-24 15:43:47
我沒有在我的代碼中的任何地方寫過「NSKeyedArchiver」。這是問題。對於這個問題來自哪裏/哪裏,我沒有絲毫的線索。我假設一個可轉換類型屬性可以包含一個自定義對象,從而構建實體。 – propstm 2012-02-24 15:48:56
對,它聽起來像NSKeyedArchiver正在由您正在使用的類或框架管理。雖然你不直接對NSKeyedArchiver對象負責,但你的代碼可能有一個錯誤,正在以這種無益的方式表現出來。如果您設置斷點並進行回溯,則可以作爲調試的起點。 – bneely 2012-02-24 16:06:57