在NSObject中玩NSSound(带有Objective-C的Mac App)

Dev*_*per 6 cocoa objective-c nssound nsobject

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

NSSound *music = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:self.filename ofType:self.fileExtention] byReference:NO];
[music play];
Run Code Online (Sandbox Code Playgroud)

当我将它放在AppDelegate.m文件中时,此代码可以工作,但是当我将它放在New 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!");
}
Run Code Online (Sandbox Code Playgroud)

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

[[[Music alloc] init] playMusic:self.fileName ofType:self.extension];
Run Code Online (Sandbox Code Playgroud)

执行此操作时,它会记录"Works!" 这意味着代码被执行.

所以完全相同的代码在AppDelegate中工作,但在NSObject类中不起作用.有没有人知道是否可以在NSObject类中播放NSSound(如果不是,为什么?),如果是这样,如何编辑代码以使其有效?它会使我的代码看起来不那么混乱;)

Ash*_*ish 1

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

dispatch_async(dispatch_get_main_queue(), ^{
  // do work here
});
Run Code Online (Sandbox Code Playgroud)