2

我有问题

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"];

这不工作

有什么想法!?

谢谢

4

3 回答 3

6

我猜测 file.list 中的 fileName 包含文件扩展名。因此,您正在搜索不存在的“soundName.aiff.aiff”。尝试传递 @"" 作为类型或从文件名中删除扩展名:

fileName = [fileName stringByDeletingPathExtension];
于 2010-05-04T17:11:21.390 回答
1

检查您的调试器控制台,因为它可能会告诉您您做错了什么。

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

  • fileListnil
  • 从返回的字典[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)。

无论您遇到什么问题,都可以使用调试器进行调查。

于 2010-05-07T03:04:02.627 回答
0

对不起我的错。我从 XML 文件中获取数据,该数据包括“\n”。是的,我看到“\n”,所以我用@“”替换,但这还不够,我必须再次修剪空间值。

谢谢大家的建议^_^

于 2010-05-07T04:25:51.253 回答