我有
的问题NSString *filePaht = [[NSBundle mainBundle] pathForResource:(NSString *)name ofType:(NSString *)ext];
如果我使用
NSString *filePaht = [[NSBundle mainBundle] pathForResource:@"soundName" ofType:@"aiff"];
没关系。但是当我用
时NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"];
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];
这不起作用
有任何想法!?
谢谢
答案 0 :(得分:6)
我猜测file.list中的fileName包含文件扩展名。所以你正在搜索不存在的“soundName.aiff.aiff”。尝试传递@“”表示类型或从fileName中剥离扩展名:
fileName = [fileName stringByDeletingPathExtension];
答案 1 :(得分:1)
检查调试器控制台,因为它可能会告诉您出错了什么。
[file.list objectAtIndex:index]
如果您收到NSRangeException,可能是因为index
包含的索引超出了数组的范围。请记住,Cocoa中的数组是串行的,而不是关联的;如果你删除一个对象,它后面的所有对象的索引将减少1,支持0≤(每个有效索引)的不变量< (数组中对象的数量)。
也可能是因为you never declared a variable named index
。
NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"]; NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];
如果没有发生任何事情或者你得到NSInternalInconsistencyException,它可能是以下之一:
fileList
是nil
。[file.list objectAtIndex:index]
返回的词典没有键soundName
的对象。如果您在控制台中收到“不响应选择器”消息,则可能是以下之一:
file.list
是一个对象,但不是NSArray。[file.list objectAtIndex:index]
不是NSDictionary。fileName
([[file.list objectAtIndex:index] objectForKey:@"soundName"]
)不是NSString。请记住,除了编译器之外,在声明变量时使用的类名无关紧要;在运行时,它只是一个包含指向对象的指针的变量。该对象可以是任何类。将非NSString的东西放入NSString *
变量是完全有效的;它只会带来非常高的(接近某些)错误行为风险和/或此后不久崩溃。
这种崩溃通常会以“不响应选择器”异常的形式出现(在某些内容向对象发送消息后,例如NSString对象应该响应,但该对象不响应因为它不是NSString)。
无论您遇到什么问题,都可以使用the Debugger进行调查。
答案 2 :(得分:0)
抱歉,我的错。 我从XML文件中获取数据 这些数据包括“\ n”。是的我看到“\ n”所以我用@“”替换 但还不够,我必须再次削减空间价值。
感谢所有建议^ _ ^