为什么我的代码坏了?(NSMutableArray问题)

EBM*_*EBM -2 objective-c

以下代码中断,返回'(lldb)':

NSMutableArray *numbersArray;

numbersArray = [[NSMutableArray alloc] init];

for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}
int r = rand()%34;

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Dav*_*ist 6

您没有初始化阵列(在第1行)并且指向未使用的内存.它应该是

NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

你在做什么不同于指出nil哪个是安全的.如果你愿意的话

NSMutableArray *numbersArray = nil;
Run Code Online (Sandbox Code Playgroud)

你会看到数组总是空的,因为它发送的消息不会nil导致任何事情发生(例如添加对象nil根本不做任何事情).


更新(编辑后):

你的代码运行正常.你可能只是没有得到它的功能.

您的前几行创建一个包含34个值的数组 -1

NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在0到33之间随机化一个积分值

int r = rand()%34;
Run Code Online (Sandbox Code Playgroud)

然后"while"所有-1的数组包含该数字,您随机化一个新数字.

由于你的第一个数字是正数,并且数组填充了所有-1,所以你永远不会进入循环体,所以你的代码只是跨过它.

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
} 
Run Code Online (Sandbox Code Playgroud)

我无法理解你想要做什么,但这正是你的代码目前正在做的事情.(虽然有效,但却毫无意义)