NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ",
@"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ",
@"DHL", @"INTERATTICA", @"SPEEDEX",
@"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];
最後にnilがあるため、これは機能しています。
しかし、私はこのようなオブジェクトを追加します:addObject:name
など...最後にnilを追加する必要があります。このaddObhect:nilを実行しますが、アプリを実行するとcellForRowAtIndexPath:
どうすればこの作業を行うことができますか?
OK、nilを追加する必要はありません
アプリがクラッシュする理由は何ですか?
addObject
を呼び出しているときにnilを追加することはできません。
nil
オブジェクトをコレクションに追加する必要がある場合は、NSNull
クラスを使用します。
NSNullクラスは、コレクションオブジェクト(nil値を許可しない)でnull値を表すために使用されるシングルトンオブジェクトを定義します。
「配列」がNSMutableArray型であると仮定します。
....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];
[addObject:nil]
を呼び出す必要はありません
initWithObjects:
内のnil
は、C varargs
がどのように機能するかにより、リストの終了位置をメソッドに伝えるためだけにあります。 addObject:
でオブジェクトを1つずつ追加する場合、nilを追加する必要はありません。
コレクションにヌルっぽいアイテムが本当に必要な場合は、 NSNull がそのためにあります。
NSNull
クラスを追加する必要があり、これを行う最適な方法は次のとおりです。
NSArray *array = @[ @"string", @42, [NSNull null] ];
コードの設計では、nullまたはnilの代わりに0
のような特定の値を使用することを個人的にお勧めしますが、nullを追加する必要がある場合もあります。
this Apple reference からの良い説明があります。
nilは配列を終了するために使用されます
nil
は、配列に追加できるオブジェクトではありません。配列にnil
を含めることはできません。これが理由です addObject:nil
クラッシュします。
オブジェクトからnilオブジェクトを挿入しようとするクラッシュを避けるために、配列に追加するときにこのメソッドを介してオブジェクトを渡します。
-(id) returnNullIfNil:(id) obj {
return (obj == nil) ? ([NSNull null]) : (obj);
}
[NSNull null]は、nilを表すnullオブジェクトを返します。
そのクラスは不変であるため、NSArray
にオブジェクトを追加することはできません。作成後に配列を変更する場合は、NSMutableArray
を使用する必要があります。