1

我正在制作一个可以在事件中播放声音的应用程序,但我不知道如何从应用程序的 ressources 文件夹中访问文件。

这是我正在做的事情:

NSSound *player = [[NSSound alloc] initWithContentsOfFile:@"Sound.mp3"] byReference:NO];
[player play];

但它根本不起作用。如果我放置完整长度的路径,它会起作用,但我需要另一种方式,因为有人可能会将我的应用程序放在 Application 文件夹之外的其他位置。

4

2 回答 2

9

您需要将NSBundle类与pathForResource:ofType:引用文件的方法一起使用:

NSSound *player = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"mp3"] byReference:NO];
[player play];

这将返回传递给该方法的资源的完整路径名。

于 2009-07-09T11:02:08.947 回答
1

只是为了澄清为什么您的初始解决方案不起作用:

相对路径是相对于当前工作目录的。对于从 Finder 启动的 GUI 应用程序,初始工作目录是 /——即文件系统的根目录。如果它是您的捆绑包的 Resources 文件夹,您的解决方案就会奏效。

正如 Perspx 在他的回答中指出的那样,正确的解决方案是要求您的包将相对路径转换为完整路径。

于 2009-07-09T15:20:35.793 回答