2012-03-23 5 views
1

CoreData를 사용하여 데이터베이스의 기존 레코드를 업데이트하려고하지만 관리 대상 접근 자 메서드를 사용할 때 예외가 발생합니다.iOS : 데이터를 업데이트 할 때 CoreData 예외가 발생합니다.

코드 발췌 : 오류의 원인이

NSManagedObjectContext *tmpManagedObjectContext = [self.fetchedResultsController managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:tmpManagedObjectContext]; 
[request setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contact_id = %@", [dict objectForKey:@"contact_id"]]; 
[request setPredicate:predicate]; 

NSError *error = nil; 
[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]]; 

Contact *contact = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0]; 
contact.sync_status = @"Y"; 

error = nil; 
if (![tmpManagedObjectContext save:&error]) { 
    NSLog(@"Error setting sync status on contact record - error: %@", [error localizedDescription]); 
} 

라인은 다음과 같습니다

contact.sync_status = @"Y"; 

오류로 인해 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는 * 입니다 : '- [NSKnownKeysDictionary1 setSync_status :] : 인스턴스로 전송 된 인식 할 수없는 선택기 0x8907fd0 ' * 첫 번째 호출 스택 :

연락처는 Xcode에서 자동 생성 한 NSManagedObject 클래스입니다.

내 접근 방식이 잘못 되었습니까? 레코드를 가져 오거나 삭제하는 데 아무런 문제가 없었지만 데이터를 업데이트하는 방법에 문제가 있습니다.

모든 도움이나 도움을 주시면 감사하겠습니다. 감사.

+0

디버거에서 '연락처'개체를 보면, 생각하는 유형이 아닌 것처럼 보입니다. – jrturton

답변

10

관리되는 개체 대신 사전을 반환하도록 가져 오기 요청을 구성했습니다. 반환 된 객체를 업데이트하려면 가져 오기 요청에서 객체를 요청해야합니다. 즉, 수행중인 작업 대신 기본 비헤이비어를 사용하십시오.

[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]]; 

을 그리고 당신은 괜찮을거야 :

이 줄을 제거합니다. 위의 줄은 가져 오기에서 특정 속성 만 반환하려는 경우에 사용되지만 전체 개체를 원할 경우 사용됩니다.

+0

감사합니다. 문제가 해결되었습니다. – rosst400

관련 문제