NSMutableArray:addObject"nil"?

jdl*_*jdl 8 cocoa-touch objective-c

我遇到麻烦在数组的末尾添加"nil",我得到"NSInvalidArgumentException"?

NSMutableArray *k = [NSMutableArray arrayWithCapacity:10];

for (int i=0; i<9; i++){
    [k addObject: @"blank"];
}
[k addObject: nil]; //<-- NSInvalidArgumentException
Run Code Online (Sandbox Code Playgroud)

我需要在循环中逐项完成所有这些操作,然后添加"nil".

谢谢

(然后我接受这个数组并初始化一个2D数组.问题是我不能用没有"nil"的数组成功"replaceObjectAtIndex".如果我用"initWithObjects:@"构建"k"空白",@ "空白",@"空白",......无"这将起作用.但是写1000个空格有点多.所以这就是循环的目的."

//////这里是初始化和构建2D Matrix的试用和错误代码,用于从"CSV文件"中读取和存储矩阵//////

///*
NSMutableArray *ppp = [NSMutableArray arrayWithCapacity:2];
NSMutableArray *kkk = [NSMutableArray arrayWithCapacity:20];

NSNull *myNull = [NSNull null];
for (int i=0; i<9; i++) {
    //[kkk addObject: [NSMutableString stringWithFormat: @"%d",i]];
    [kkk addObject: myNull];
}
//[kkk addObject: nil];

[ppp addObject:kkk];
[ppp addObject:kkk];
//*/


/*
// this is successful --> just uncomment this block and comment out the block above
[ppp addObject:[[NSMutableArray alloc] initWithObjects:
             @"z1",
             @"z2",
             @"z3",
             @"z4",
             @"z5",
             @"z6",
             @"z0gg",
             @"z0hh",
             @"z0ii",
             @"z0jj",
             nil
             ]];

[ppp addObject:[[NSMutableArray alloc] initWithObjects:
        @"a1",
        @"b2",
        @"c3",
        @"d4",
        @"e5",
        @"f6",
        nil
        ]];
Run Code Online (Sandbox Code Playgroud)

*/

[[ppp objectAtIndex:0] replaceObjectAtIndex:1 withObject:@"HOTDOG"];
[[ppp objectAtIndex:1] replaceObjectAtIndex:1 withObject:@"HOHO"];
// HOHO will replace HOTDOG as well for the code not using "nil"
Run Code Online (Sandbox Code Playgroud)

Ale*_*lds 13

您无法添加nilNSMutableArray,如果您尝试,则会引发异常.

还有NSNull,虽然:

NSNull *myNull = [NSNull null];
[myMutableArray addObject:myNull];
Run Code Online (Sandbox Code Playgroud)

但是,您可能会问自己为什么要尝试这样做.


sid*_*yll 9

您不需要nil作为数组中的最后一个元素.

不要把自己与+arrayWithObjects:变量方法混淆,比如接收灵活数量的参数,然后需要找到哪一个是最后一个.那是因为在那些方法实现(以及可变参数C函数)中,您无法检索传递的参数数量,因此nil标记结束.


作为一般规则,您可以使用与维度相同的量嵌套循环.在您的情况下,这将填充具有不同对象的"2D"数组:

NSMutableArray *array = [NSMutableArray array];
int i,j;

for (i = 0; i < 2; ++i) {
    NSMutableArray *s_array = [NSMutableArray array];
    [array addObject:s_array];
    for (j = 0; j < 8; ++j) {
        [s_array addObject:[NSString stringWithFormat:@"%d%d", i, j]];
    }
}
Run Code Online (Sandbox Code Playgroud)