0

キー値コーディングを使用してコレクション演算子 (@minなど@max) を使用すると、配列内の値の 1 つが である場合に例外が発生します。NSArraysNSNull 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 のドキュメントによると、私のコードは削除せずに動作するはずNSNull nullです:

キーパスの右側の値が nil の場合は無視されます。

keyPath ステートメントを使用して、ランタイム例外を取得せずに、また事前に削除することなく、配列の最小値と最大値を取得するにはどうすればよいNSNull nullですか?

4

1 に答える 1

2

ドキュメントを誤解しています。これ:

キーパスの右側の値が nil の場合は無視されます。

@min.field が nil の場合、無視されることを意味します。しかし、あなたがしているのは、NSNumber を含むコレクションの最小値と最大値を計算しようとしていることです。したがって、おそらく decimalValue メソッドが使用されますが、NSNull はそのキーのキー値に準拠していません。したがって、コレクションから NSNull オブジェクトを削除し続ける必要があります。

于 2013-02-09T12:52:14.947 に答える