既存の配列を取得し、そこから nil 値を削除して、配列にデータを入力しようとしています。配列は、http 呼び出しの JSON 応答から取り込まれました。NSArray
配列の最後に null 値がある場合があり、その値を削除してコードのどこでも処理する必要がないようにする最も簡単な方法は、 をfilteredArrayUsingPredicate:
使用して変数をインスタンス変数に割り当てることです。クラス。
NSArray *respAgencyList = (NSArray*) [JSON valueForKeyPath:@"xml.path.to.data" ];
NSLog(@"data before filter: %@", respAgencyList);
// prints: ( { domain: "foo.com", name:"foobar"}, "<null>" });
if (respAgencyList != nil && respAgencyList.count > 0) {
agencies = [respAgencyList filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
NSLog(@"Evaluated object is %@", evaluatedObject); //prints <null> for the null value
BOOL ret = evaluatedObject != nil;
return ret;
}]];
}
上記のコードでは、戻り値は常にYES
です。ただし、デバッガーをオンにしてステップ実行すると、次のように表示されます。
evaluatedObject = id 0x00000000
これはnull
/nil
値ではありませんか? と比較して、この値の違いは何nil
ですか?