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(如果不是,为什么?),如果是这样,如何编辑代码以使其有效?它会使我的代码看起来不那么混乱;)
尝试在主线程上调用方法,
dispatch_async(dispatch_get_main_queue(), ^{
// do work here
});
Run Code Online (Sandbox Code Playgroud)