2009-12-02 4 views
7

내가 사용 NSManagedObject 서브 클래스를 초기화하고 있습니다 :NSManagedObject 하위 클래스와 setValuesForKeysWithDictionary :

- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues 

은 또한 고의로 그것을 물론 예외를 throw해야 정의되지 않은 키를 제공하고 있습니다.

그래서,이 구현 : 키가 정의되지

- (void)setValue:(id)value forUndefinedKey:(NSString *)key 

경우에, 나는 정확한 키에 매핑.

의 구현이 사용 된 적이 있는데, 여전히이 예외를 throw합니다.

setValuesForKeysWithDictionary:이 하위 클래스 구현 setValue:forUndefinedKey:을 사용하지 못하게하는 동작 (또는 버그)이 있습니까?

의 요청에 따라 코드를 추가,하지만 난 그냥 전화를받을하지 않는 기존의 방법을 구현하고 있기 때문에, 나는 그것이 얼마나 큰 도움이 모르는 : 맥락에서

:

- (Company*)companyWithDictionary:(NSDictionary*)values{ 

    Company* newCompany = (Company*)[NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:self]; 

    [newCompany setValuesForKeysWithDictionary:values]; 

    return newCompany; 
} 
(절대 호출되지)에 Company 서브 클래스에서

:

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ 

    if([key isEqualToString:idKey]){ 

     [self setValue:value forKey:@"uniqueID"]; 

    }else if([key isEqualToString:descriptionKey]){ 

     [self setValue:value forKey:@"descriptionText"]; 

    }else if([key isEqualToString:timeUpdatedKey]){ 

     [self setValue:value forKey:@"dateUpdated"]; 

    }else{ 

     [super setValue:value forUndefinedKey:key]; 

    } 
} 

답변

3

이 방지 NSManagedObject의 본질 아무것도 확실히 없다; 내가 일하고있는 앱에서 정확히 이것을하고있다. 더 많은 코드를 게시 할 수 있습니까?

하나의 생각 : 역시 예외를 던지고있는 것이 setValue:forUndefinedKey:일까요? 관리되는 객체의 경우 올바르게 작동하게하려면 valueForUndefinedKey: (getter)을 구현해야합니다.

+0

예, 스택 추적에 표시됩니다. 그리고 그것은 또한 확실히 NSManagedObject의 구현입니다. –

+0

valueForUndefinedKey :를 구현하지 않았습니다. 나는 그것을 시도 할 것이다. 그러나 나는 그것이 세터를 통해 왜 우 of 거리는지를 알지 못한다. –

+0

몇 가지 코드를 추가했습니다 ... –

2

간단한 질문이지만 모델의 엔터티에 대한 NSManagedObject 하위 클래스의 클래스 이름을 지정하고 있습니까?

또한 관리 대상 개체를 초기화한다고했는데 ... 어떻게해야합니까? 좋은 이유가 없다면 대부분의 경우 + [NSEntityDescription insertNewObjectForEntityForName : inManagedObjectContext :]를 통해 삽입해야합니다.

+0

예 및 예. 나는 또한 나의 모델 수업을 재창조했다. 나는 또한 model 클래스에서 valueFOrUndefinedKey를 카테고리로 구현하려고 시도했다. –

+0

그것은 실제로 이상합니다. 테스트 케이스를 줄이면 재현 할 수 있습니까? 나는 비슷한 일을했지만이 문제에 결코 빠지지 않았습니다. –

1

CoreData 프레임 워크의 빠른 클래스 - 덤프는 도 setValuesForKeysWithDictionary:을 덮어 쓰고 있음을 나타내므로 성능상의 이유로 또는 그와 같은 방법으로 해당 메서드에 대한 사용자 지정을 수행하는 것처럼 보입니다. 나는 아마도 setValuesForKeysWithDictionary:에 해당하는 내 자신의 메서드를 작성하고 대신 전체 혼란을 피하기 위해 호출 할 것이다. 다음과 같은 것 :

- (void)mySetValuesForKeysWithDictionary:(NSDictionary*)dict 
{ 
    for (NSString* key in dict) 
     [self setValue:[dict objectForKey:key] forKey:key]; 
} 
+0

본질적으로 내가 한 일이지만 NSNull 값을 고려해야합니다. Sixten의 솔루션을 구현 한 후에도 다른 이상한 오류가있어서 수건을 던졌습니다. –

관련 문제