nsmanagedObject 서브 클래스 및 setValuesforkeyswithDictionary :
-
11-09-2019 - |
문제
나는 초기화하고있다 NSManagedObject
서브 클래스 사용 :
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues
나는 또한 고의로 정의되지 않은 키를주고 있습니다. ~해야 한다 예외를 던져.
그래서 나는 구현했다 :
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
키가 정의되지 않은 경우 올바른 키에 매핑합니다.
그러나 내 구현은 결코 호출되지 않습니다 NSManagedObject
구현이 사용되며 이는 차례로 사용됩니다 아직 예외를 던집니다.
방지하는 행동 (또는 버그)이 있습니까? setValuesForKeysWithDictionary:
사용에서 NSManagedObject
서브 클래스 구현 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];
}
}
해결책
nmanagedObject에 본질적인 것은 없다. 나는 내가 작업중 인 앱에서 정확히 이것을하고있다. 더 많은 코드를 게시 할 수 있습니까?
한 가지 생각도 : 당신은 그것이 확실합니까? setValue:forUndefinedKey:
예외를 던지고 있습니까? 관리되는 개체의 경우, 나는 당신도 구현해야한다고 확신합니다. valueForUndefinedKey:
(Getter) 일을 제대로 작동하게합니다.
다른 팁
간단한 질문이지만 모델의 엔티티에 NSMANADEDOBJECT 서브 클래스의 클래스 이름을 지정하고 있습니까?
또한, 당신은 당신이 관리되는 객체를 초기화하고 있다고 말했습니다 ... 어떻게? +[nsentityDescription insertNewObjectForentityForname : inmanagedObjectContext :]를 통해 삽입해야합니다. 대부분의 경우, 아무런 이유가 없다면.
Coredata 프레임 워크의 빠른 클래스 덤프가이를 나타냅니다 NSManagedObject
또한 무시합니다 setValuesForKeysWithDictionary:
, 따라서 그것은 성능의 이유 또는 그와 비슷한 일을 위해 그 방법에 대해 약간의 사용자 정의를하고있는 것처럼 보입니다. 나는 아마도 내 자신의 방법을 작성할 것입니다. setValuesForKeysWithDictionary:
대신 전체 혼란을 피하기 위해 전화하십시오. 이 같은:
- (void)mySetValuesForKeysWithDictionary:(NSDictionary*)dict
{
for (NSString* key in dict)
[self setValue:[dict objectForKey:key] forKey:key];
}