6

我正在制作一个需要播放音乐的游戏。为了使我的代码更易于管理,我想制作一个 NSObject 来处理声音(如淡入淡出、在播放列表中播放声音等)。我有这个代码:

NSSound *music = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:self.filename ofType:self.fileExtention] byReference:NO];
[music play];

此代码在我将它放在 AppDelegate.m 文件中时有效,但在我将它放在新 NSObject 类中时不起作用。

NSObject 类中的代码(名为 Music):

- (void)playMusic:(NSString *)fileName ofType:(NSString *)type
{
    NSSound *music = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:self.filename ofType:self.fileExtention] byReference:NO];
    [music play];

    NSLog(@"Works!");
}

我在 AppDelegate.m 中使用此代码调用该方法:

[[[Music alloc] init] playMusic:self.fileName ofType:self.extension];

执行此操作时,它会记录“工作!” 这意味着代码被执行。

所以完全相同的代码在 AppDelegate 中有效,但在 NSObject 类中无效。有谁知道是否可以在 NSObject 类中播放 NSSound(如果不是,为什么?),如果可以,如何编辑代码以使其正常工作?它会让我的代码看起来不那么凌乱;)

4

1 回答 1

1

尝试在主线程上调用方法,

dispatch_async(dispatch_get_main_queue(), ^{
  // do work here
});
于 2017-11-09T12:27:38.317 回答