Обработка NSNull для значений свойств NSManagedObject

Я устанавливаю значения для свойств моего NSManagedObject , эти значения поступают из NSDictionary правильно сериализован из файла JSON. Моя проблема в том, что, когда какое-то значение равно [NSNull null] , я не могу назначить его напрямую свойству:

    fight.winnerID = [dict objectForKey:@"winner"];

это вызывает исключение NSInvalidArgumentException

"winnerID"; desired type = NSString; given type = NSNull; value = <null>;

Я мог бы легко проверить значение for [NSNull null] и вместо этого назначить nil :

fight.winnerID = [dict objectForKey:@"winner"] == [NSNull null] ? nil : [dict objectForKey:@"winner"];

Но я думаю, что это не элегантно и становится беспорядочным с множеством свойств, которые нужно установить.

Кроме того, это усложняется при работе со свойствами NSNumber :

fight.round = [NSNumber numberWithUnsignedInteger:[[dict valueForKey:@"round"] unsignedIntegerValue]]

Исключение NSInvalidArgumentException теперь равно:

[NSNull unsignedIntegerValue]: unrecognized selector sent to instance

В этом случае мне нужно обработать [dict valueForKey : @ "round"] перед созданием для него значения NSUInteger . И однострочного решения больше нет.

Я пытался создать блок @try @catch, но как только первое значение было поймано, он перескакивает через весь блок @try, а следующие свойства игнорируются.

Есть ли лучший способ обработать [NSNull null] или, возможно, сделать это совсем по-другому, но проще?

35
задан Lucien 4 February 2012 в 02:28
поделиться