pathForResource不起作用

时间:2010-05-04 16:51:52

标签: cocoa nsbundle

我有

的问题
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"];

这不起作用

有任何想法!?

谢谢

3 个答案:

答案 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,它可能是以下之一:

  • fileListnil
  • [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”所以我用@“”替换 但还不够,我必须再次削减空间价值。

感谢所有建议^ _ ^