我正在创建一个可以在事件中播放声音的应用程序,但我无法弄清楚如何从应用程序的ressources文件夹中访问文件。
以下是我正在做的事情:
NSSound *player = [[NSSound alloc] initWithContentsOfFile:@"Sound.mp3"] byReference:NO];
[player play];
但它根本不起作用。如果我放一个完整长度的路径它会工作,但我需要另一种方式,因为有人可能会将我的应用程序放在Application文件夹以外的其他位置。
答案 0 :(得分:9)
您需要使用NSBundle
类和pathForResource:ofType:
方法来引用该文件:
NSSound *player = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"mp3"] byReference:NO];
[player play];
这将返回传递给方法的资源的完整路径名。
答案 1 :(得分:1)
只是为了澄清为什么您的初始解决方案不起作用:
相对路径相对于当前工作目录。对于从Finder启动的GUI应用程序,初始工作目录是/ - 即文件系统的根目录。如果它是您的软件包的Resources文件夹,那么您的解决方案就可以运行。
正如Perspx在他的回答中指出的那样,正确的解决方案是让你的包将相对路径转换为完整路径。