检查您的调试器控制台,因为它可能会告诉您您做错了什么。
[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)。
无论您遇到什么问题,都可以使用调试器进行调查。