Я устанавливаю значения для свойств моего 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]
или, возможно, сделать это совсем по-другому, но проще?