4

nil がパラメーターの終わりをマークすることを意図している場合、次を使用できます。

[NSArray arrayWithObjects:obj1, obj2, nil, nil, nil];

最初の nil は配列の終わりを示し、その後の 2 つの nil は無視されるのでしょうか?

私は2つの反対の答えを得たので、試してみます。

アップデート:

これを行う必要がある理由は、UIAlertView を作成する必要があるためです。これには、「OK」のみ、または「Call」と「Cancel」のボタンがある場合があるため、「OK」または「Cancel」のいずれかがキャンセル ボタンです。 、「通話」はある場合には他のボタンですが、他の場合には他のボタンは必要ありません。そのため、これを行う必要があります。

4

4 に答える 4

12

nil作成時に入れるとNSArray、それまでのオブジェクトnilが追加されます。その後のniland オブジェクトは無視されます。完了するために、(メソッドを使用して) に追加 nilすることはできず、それを行うと例外が発生します。NSMutableArrayaddObject:

[NSNull null];ただし、NSArray を作成するときに置くことができます。

于 2012-10-16T05:29:23.380 に答える
5

末尾への nil の追加は、nil を配列に追加することを意図したものではありません。これは、単に C が可変引数リストを処理する方法の成果物です。NSArray や NSMutableArray とは何の関係もありません。どちらにも nil を格納することはできません。

したがって、コンパイラが nil、nil、nil を受け入れるかどうかは、実際には無関係です。コンパイラは最初の nil で読み取りを停止します。そもそもそのコードを書くことは、obj C コレクションと var arg メソッドの誤解を示しています。

新しいリテラル構文を使用して、ただ言ってみませんか

NSArray *myArray = @[@"bla", @"bla", @"bla"];

いずれにせよ、余分な nil は、指定した構文では重要ではありません。

于 2012-10-16T07:36:51.567 に答える
2

はい、正確に、これを行うことができます。最初のものの後の nil は無視されます。

于 2012-10-16T05:28:11.337 に答える
-1

配列に意図的に nil を追加するのはなぜですか? なぜそんなことをしなければならないのか、少し立ち止まってよく考えたほうがいいと思います。配列のサイズが不明な場合は、いつでも NSMutableArray を使用できます。

于 2012-10-16T05:42:59.930 に答える