检查您的调试器控制台,因为它可能会告诉您您做错了什么。
[file.list objectAtIndex:index]
如果您收到 NSRangeException,可能是因为index包含超出数组边界的索引。请记住,Cocoa 中的数组是串行的,而不是关联的;如果您删除一个对象,那么在它之后出现的所有对象的索引都将减少 1,保持 0 ≤(每个有效索引)<(数组中的对象计数)的不变量。
也可能是因为您从未声明过名为index.
NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"];
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];
如果什么都没有发生或者你得到一个 NSInternalInconsistencyException,它可能是以下之一:
fileList是nil。
- 从返回的字典
[file.list objectAtIndex:index]没有 key 的对象soundName。
如果您在控制台中收到“不响应选择器”消息,它可能是以下之一:
file.list是一个对象,但不是 NSArray。
[file.list objectAtIndex:index]不是 NSDictionary。
fileName( [[file.list objectAtIndex:index] objectForKey:@"soundName"]) 不是 NSString。
请记住,声明变量时使用的类名无关紧要,除了编译器;在运行时,它只是一个持有指向对象的指针的变量。对象可以是任何类。将不是 NSString 的东西放入NSString *变量中是完全有效的;它只是带有非常高(几乎肯定)的错误行为和/或此后不久崩溃的风险。
这样的崩溃通常会以“不响应选择器”异常的形式表现出来(例如,在某事向对象发送 NSString 对象应该响应的消息之后,但对象不响应,因为它是'不是一个NSString)。
无论您遇到什么问题,都可以使用调试器进行调查。