web-dev-qa-db-ja.com

nsmutablearrayにnilを追加する方法は?

NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ",
                      @"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ", 
                      @"DHL", @"INTERATTICA", @"SPEEDEX", 
                      @"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];

最後にnilがあるため、これは機能しています。

しかし、私はこのようなオブジェクトを追加します:addObject:nameなど...最後にnilを追加する必要があります。このaddObhect:nilを実行しますが、アプリを実行するとcellForRowAtIndexPath:

どうすればこの作業を行うことができますか?

OK、nilを追加する必要はありません

アプリがクラッシュする理由は何ですか?

51
stefanosn

addObjectを呼び出しているときにnilを追加することはできません。

19
mr-sk

nilオブジェクトをコレクションに追加する必要がある場合は、NSNullクラスを使用します。

NSNullクラスは、コレクションオブジェクト(nil値を許可しない)でnull値を表すために使用されるシングルトンオブジェクトを定義します。

「配列」がNSMutableArray型であると仮定します。

....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];
230

[addObject:nil]を呼び出す必要はありません

initWithObjects:内のnilは、C varargsがどのように機能するかにより、リストの終了位置をメソッドに伝えるためだけにあります。 addObject:でオブジェクトを1つずつ追加する場合、nilを追加する必要はありません。

26
Mike Weller

コレクションにヌルっぽいアイテムが本当に必要な場合は、 NSNull がそのためにあります。

15
David Grant

NSNull クラスを追加する必要があり、これを行う最適な方法は次のとおりです。

NSArray *array = @[ @"string", @42, [NSNull null] ];

コードの設計では、nullまたはnilの代わりに0のような特定の値を使用することを個人的にお勧めしますが、nullを追加する必要がある場合もあります。

this Apple reference からの良い説明があります。

6
mert

nilは配列を終了するために使用されます

6
Tomen

nilは、配列に追加できるオブジェクトではありません。配列にnilを含めることはできません。これが理由です addObject:nilクラッシュします。

5
mouviciel

オブジェクトからnilオブジェクトを挿入しようとするクラッシュを避けるために、配列に追加するときにこのメソッドを介してオブジェクトを渡します。

-(id) returnNullIfNil:(id) obj  {
    return (obj == nil) ? ([NSNull null]) : (obj);
}

[NSNull null]は、nilを表すnullオブジェクトを返します。

0
Manjuhere

そのクラスは不変であるため、NSArrayにオブジェクトを追加することはできません。作成後に配列を変更する場合は、NSMutableArrayを使用する必要があります。

0
TechZen