Я устанавливаю значения для свойств моего NSManagedObject
, эти значения исходят из NSDictionary
, правильно сериализованного из файла JSON. Моя проблема в том, что, когда какое-то значение [NSNull null]
, я не могу напрямую назначить свойство:
fight.winnerID = [dict objectForKey:@"winner"];
это выдает a NSInvalidArgumentException
"winnerID"; desired type = NSString; given type = NSNull; value = <null>;
Я мог бы легко проверить значение для [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]
или, возможно, сделать это совсем другим, но проще?