iphone - 尝试通过 iPhone 模拟器播放声音

标签 iphone cocoa-touch ios-simulator

我正在尝试从 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/

相关文章:

iphone - 如何异步渲染 UIImage?

iphone - 如何正确包含 GoogleAdMobAds?

iOS 8 应用程序的声音不像 iOS 7 那样工作

iPhone 键盘下一个按钮

iphone - View Controller 的 viewDidLoad 方法在 applicationDidFinishLaunching 之前完成

objective-c - 如何按比例缩放 UIImageView?

ios - iPhone 6 上的拉伸(stretch)界面

iphone - 什么时候调用 'drawRect'?

iOS模拟器无法连接到本地网络IP地址

ios - 在远程服务器中设置 Jenkins 并连接到本地计算机