我正在制作一款需要播放音乐的游戏。为了使我的代码更易于管理,我想制作一个能够处理声音的NSObject(如淡入淡出,播放播放列表中的声音等)。我有这段代码:
NSSound *music = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:self.filename ofType:self.fileExtention] byReference:NO];
[music play];
当我将它放在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!");
}
我在AppDelegate.m中使用此代码调用该方法:
[[[Music alloc] init] playMusic:self.fileName ofType:self.extension];
当执行此操作时,它会记录" Works!"这意味着代码被执行。
所以完全相同的代码在AppDelegate中工作,但在NSObject类中不起作用。有没有人知道是否可以在NSObject类中播放NSSound(如果不是,为什么?),如果是这样,如何编辑代码以使其有效?它会让我的代码看起来更乱;)
答案 0 :(得分:1)
在主线程上尝试调用方法,
dispatch_async(dispatch_get_main_queue(), ^{
// do work here
});