我在数组末尾添加“nil”时遇到麻烦,我得到“NSInvalidArgumentException”?
NSMutableArray *k = [NSMutableArray arrayWithCapacity:10];
for (int i=0; i<9; i++){
[k addObject: @"blank"];
}
[k addObject: nil]; //<-- NSInvalidArgumentException
我需要在循环中逐项完成所有这些操作,然后添加“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
]];
* /
[[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"
答案 0 :(得分:13)
您无法将nil
添加到NSMutableArray
和you will raise an exception if you try to。
虽然有NSNull
:
NSNull *myNull = [NSNull null];
[myMutableArray addObject:myNull];
然而,你可能会问自己为什么要尝试这样做。
答案 1 :(得分: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]];
}
}
答案 2 :(得分:2)
你不能添加nil ..(你没必要)。