2012-06-18 3 views
0

Я пытаюсь отобразить словарь строк из JSON-выборки в KVC-совместимый NSManagedObject, я могу успешно использовать setValue: forKey:, но я не вижу, как я могу отображать типы.iOS KVC DRY мутация

Например, я не могу установить дату для любой случайной строки: Printing description of myDate: asdfsadf Однако это сработало.

Я посмотрел https://stackoverflow.com/a/5345023/828859, который предоставил некоторые полезные ответы. Я могу войти и создать валидацию для каждого отдельного свойства ... но это не кажется очень сухим, потому что больной должен проверять каждую дату и устанавливать значение out отдельно каждый раз, когда у меня есть дата.

Я предпочел бы мутировать по типу, прежде чем использовать 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 
} 

Это происходит потому, что объекты являются структурами, содержащих указатель с именем Ивара isa, указывающее на объект типа Class, так что вы всегда можете задать объект, какой класс он приходит от ,

+0

Правда, однако я не был ясен в своем вопросе, словарь исходит из ответа JSON, поэтому его словарь строк. – MrJD

+0

А, я вижу. Я не думаю, что есть чистый способ делать то, что вы хотите. Вам либо нужно знать, что ключи впереди времени, так и их типы, и переключить свой тип объекта на основе этого или вам нужно выполнить целую цепочку сканирования строк, чтобы выяснить, с чем вы работаете, и затем проверить. –

 Смежные вопросы

  • Нет связанных вопросов^_^