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