2012-06-18 2 views
0

JSON 가져 오기의 문자열 사전을 KVC 호환 NSManagedObject에 매핑하려고 시도했지만 성공적으로 setValue: forKey:을 사용할 수 있지만 형식을 매핑하는 방법을 알 수 없습니다.iOS KVC DRY 돌연변이

예를 들어 날짜를 임의의 문자열로 설정할 수 없어야합니다 : Printing description of myDate: asdfsadf 그러나 효과가있었습니다.

나는 유용한 조언을 제공 한 https://stackoverflow.com/a/5345023/828859을 보았습니다. 들어가서 모든 속성에 대한 유효성 검사를 만들 수는 있지만 병이 모든 날짜의 유효성을 검사하고 날짜가있을 때마다 별도의 값을 설정해야하기 때문에별로 건강하지 않은 것으로 보입니다.

내가 setValue: forKey:을 사용하기 전에 유형별로 돌연변이하는 것을 선호하지만 속성 유형을 어떻게 구별 할 것인지 잘 모릅니다.

switch([object typeforkey:key]){ 
    case @"NSDate": 
    //... 
    value = mutatedDate 
    //... 
} 
[object setValue:value forKey:key]; 

답변

0

속성 유형 매핑을위한 다른 사전을 사용하여 끝냈습니다. 그런 다음 객체 매핑 객체는 매핑 할 객체를이 특정 프로토콜에 따라 검사하고 setValue:forKey:을 사용하기 전에 속성 유형 사전을 사용하여 각 속성을 변환합니다.

0

당신은 그것으로 인스턴스화 된 클래스의 어떤 종류의 객체를 요청할 수 있습니다 :

내가 뭘 원하는지. 그래서 당신은 같은 것을 수행 할 수 있습니다

id myObject = [myDictionary objectForKey:key]; 

if ([myObject isKindOfClass:[NSDate class]]) { 
    // Do stuff 
} 
else if ([myObject isKindOfClass:[NSString class]]) { 
    // Do other stuff 
} 

를 객체 유형 Class의 객체를 가리키는 바르 이름 isa와 포인터를 포함하는 구조체가 있기 때문입니다, 그래서 당신은 항상에서 오는 클래스의 어떤 종류의 객체를 요청할 수 있습니다 .

+0

사실,하지만 내 질문에 명확하지 않았다, 사전은 JSON 응답에서, 그래서 문자열의 사전. – MrJD

+0

아, 알겠습니다. 나는 당신이 원하는 것을 할 수있는 깨끗한 방법이 없다고 생각합니다. 당신은 키가 미리 무엇인지 그리고 그 타입이 무엇인지 알 필요가 있고 그것을 기반으로 객체 타입을 바꿀 필요가있다. 그렇지 않으면 당신은 당신이 작업하고있는 것과 유효성을 확인하기 위해 전체 문자열 스캔을 할 필요가있다. –