我正在为我的属性设置值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]
或者可能使这完全不同但更容易?