2012-02-24 63 views
0

在覈心數據中,我設置了一個名爲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方法?我不知道這是從哪裏來的?

+0

您是否正在回溯到 - [NSKeyedArchiver dealloc]警告?在Xcode上設置一個斷點 - [NSKeyedArchiver dealloc],這樣你就可以看到調用的起源。 – bneely 2012-02-24 15:43:47

+0

我沒有在我的代碼中的任何地方寫過「NSKeyedArchiver」。這是問題。對於這個問題來自哪裏/哪裏,我沒有絲毫的線索。我假設一個可轉換類型屬性可以包含一個自定義對象,從而構建實體。 – propstm 2012-02-24 15:48:56

+0

對,它聽起來像NSKeyedArchiver正在由您正在使用的類或框架管理。雖然你不直接對NSKeyedArchiver對象負責,但你的代碼可能有一個錯誤,正在以這種無益的方式表現出來。如果您設置斷點並進行回溯,則可以作爲調試的起點。 – bneely 2012-02-24 16:06:57

回答

1

我需要在提交給CoreData中的自定義對象之前進行編碼。我需要使用 - (void)encodeWithCoder:(NSCoder *)編碼器;和 - (id)initWithCoder:(NSCoder *)解碼器;方法。

相關問題