2012-02-24 2 views
0

핵심 데이터에서 간단히 golferObject (변형 가능 유형) 및 playerId (문자열) 만 포함하는 GolferEntity라는 간단한 엔티티를 설정했습니다. 이 코드는 나에게 읽는 런타임 오류를주고있다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로 전송'- 아니 내 코드에서 내가 그래서 'NSKeyedArchiver을 alloc'd있는 곳 이것은 핵심 데이터에 의해 수행 된 것이라고 가정합니다. 또한 내 GolferObject에는 encodeWithCoder 메서드가 없습니다. 나는 이것이 어디에서 왔는지 모른다.

+0

[NSKeyedArchiver dealloc] 경고에 백 트레이스가 표시됩니까? - [NSKeyedArchiver dealloc]의 Xcode에 중단 점을 설정하면 호출의 시작 위치를 알 수 있습니다. – bneely

+0

내 코드에서 "NSKeyedArchiver"를 쓰지 않았습니다. 그게 문제 야. 나는이 문제가 어디에서 왔는지에 관해서 조금도 단서가 없다. 변형 가능한 형식 특성에 사용자 지정 개체가 포함될 수 있다는 가정하에 엔터티를 구조화했습니다. – propstm

+0

NSKeyedArchiver가 사용중인 클래스 나 프레임 워크에 의해 관리되고있는 것 같습니다. NSKeyedArchiver 객체에 대한 직접적인 책임은 없지만 코드에는이 도움이되지 않는 방법으로 명시된 오류가있을 수 있습니다. 중단 점을 설정하고 역 추적을 얻으면 디버깅을위한 시작점이 될 수 있습니다. – bneely

답변

1

CoreData에서 내 맞춤 개체에 제출하기 전에 인코딩해야했습니다. - (void) encodeWithCoder : (NSCoder *) 인코더를 사용해야했습니다. - (id) initWithCoder : (NSCoder *) 디코더; 행동 양식.