如何将nil添加到nsmutablearray?

ste*_*osn 51 iphone null objective-c nsmutablearray

NSArray *array = [[NSArray alloc] initWithObjects:@"????",
                      @"???? COURIER", @"ACS", @"ACS ?????????", 
                      @"DHL", @"INTERATTICA", @"SPEEDEX", 
                      @"UPS", @"?????? ???????????", @"??????????? ??????????", nil];
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为它最后没有.

但是我添加了这样的对象:addObject:name等等......所以最后我必须添加nil我这样做addObhect:nil但是当我运行应用程序时它仍然会崩溃cellForRowAtIndexPath:

我怎么做这个工作?

好吧,我不必添加零

我的应用程序崩溃的原因是什么?

Adr*_*ski 231

如果必须将nil对象添加到集合,请使用以下NSNull类:

NSNull类定义了一个单例对象,用于表示集合对象中的空值(不允许使用nil值).

假设"array"的类型为NSMutableArray:

....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];
Run Code Online (Sandbox Code Playgroud)

  • 对于新人(我),测试的例子,看看数组元素是否等于插入的nil值,'if([self.voice objectAtIndex:indexPath.row]!= [NSNull null]){'(谢谢你akosma) (2认同)

Mik*_*ler 26

你不需要打电话 [addObject:nil]

nilinitWithObjects:只有那里说不出哪里列表结束,因为C如何,该方法varargs的工作.当您逐个添加对象时,addObject:不需要添加nil.

  • 此外,nil被称为"哨兵",因为它"守卫"了列表的末尾,因此事情不会在末尾迭代.值得知道它被称为哨兵,因为您可能会看到编译器错误/警告,例如"缺少哨兵值......".在这种情况下,它意味着你在某事物的末尾忘记了一个零,通常是在initWithObjects之后的列表. (7认同)

mr-*_*-sk 19

你打电话时不能添加nil addObject.


Dav*_*ant 15

如果你真的想在你的收藏中使用Null-ish项目,NSNull就是为此而存在的.


Tom*_*men 6

nil用于终止数组


mer*_*ert 6

你需要添加NSNull类,最好的方法是这样:

NSArray *array = @[ @"string", @42, [NSNull null] ];
Run Code Online (Sandbox Code Playgroud)

我个人建议0在您的代码设计中使用特定值,而不是null或nil,但有时您需要添加null.

这篇Apple参考文献有一个很好的解释.


mou*_*iel 5

nil不是可以添加到数组的对象:数组不能包含nil.这就是addObject:nil崩溃的原因.