我正在尝试从 iPhone 程序播放声音文件。
代码如下:
NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );
第一个 NSLog 是检查我是否有权访问该文件(我确实这样做了),第二个 NSLog 是显示文件 URL,第三个 NSLog 返回 -1500“发生了未指定的错误。”
对于第二个 NSLog,我得到以下输出:
file://localhost/Users/alan/Library/Application敲慬楴敶瑓楲杮upport/iPhone蒠ꁻ猀⾅獕牥⽳污湡䰯扩慲祲䄯灰楬惯性楴汤匠灵溃玱椯桐汤枫畭慬潴⽲獕牥䄯灰楬惯楴汤⽳䙂㕅㡂㤱䌭䐳ⴸ䐴䙃㠭㍃ⴷ䍁㈶㠵䙁㤴㈰䰯捯瑡䵥灡醒汰祡挮晡im模拟器/用户/应用程序/BFE5B819 -C3D8-4DCF-8C37-AC6258AF4902/LocateMe.app/play.caf
这要么是由于我对“描述”方法的误解,要么是导致了问题。
知道出了什么问题吗?
最佳答案
NSLog 的第一个参数是格式字符串;您将 [URL description]
作为格式字符串传递给 NSLog 的第二次使用。这很糟糕,因为如果 URL 的描述包含任何 %
字符,那么它最终会从堆栈中打印随机内容。
相反,写
NSLog(@"%@", URL);
您甚至不需要在这里使用-description
; NSLog 会自动为您调用它,因为 %@
意味着“一个对象”,而不是“一个 NSString”,而且它足够智能,可以为您做正确的事情。
关于iphone - 尝试通过 iPhone 模拟器播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258006/