使用键值编码在@min
上使用集合运算符(例如@max
,NSArrays
)时,如果数组中的某个值为NSNull null
,则会出现异常。
我必须删除所有NSNull null
次出现才能使用valueForKeyPath
使其正常工作:
NSMutableArray *array = otherArray.mutableCopy;
[array removeObjectIdenticalTo:[NSNull null]];
NSNumber *minValue = [array valueForKeyPath:@"@min.self"];
NSNumber *maxValue = [array valueForKeyPath:@"@max.self"];
但是,根据Apple's Documentation,我的代码应该无需删除NSNull null
:
如果键路径右侧的值为nil,则忽略它。
如何在不获取运行时异常的情况下使用keyPath语句获取数组的最小值和最大值,而无需在之前删除NSNull null
?
答案 0 :(得分:2)
你误解了文档。这个:
如果键路径右侧的值为nil,则忽略它。
表示如果@min.field为nil,则会被忽略。但你正在做的是尝试计算包含NSNumber的集合的最小值和最大值。因此可能会使用decimalValue方法,但NSNull不符合该键的键值。所以你应该继续从集合中删除NSNull对象。