NSSound在几个小时后停止工作
我正在构建一个应用程序,以便通知某些事件。 它有声音通知和NSView/HUD通知。NSSound在几个小时后停止工作
在调试过程中,我一直在运行几个小时。我注意到几个小时后,NSSound停止发声。
我的代码很简单,在最初的几个小时做工作:
它从运行:
void onStateUpdate(void* context) {
NSSound* myAwesomeSound = [NSSound soundNamed:existingSoundFile];
if (myAwesomeSound == nil)
NSLog(@"\n\nERROR FINDING SOUND!!!?!?!\n\n");
else
NSLog(@"Code is being called!");
[myAwesomeSound play];
[myVisualHUD start];
}
这是从通过注册CFRunLoopSource称为:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
mRunLoopSource = (CFRunLoopSourceRef)IOPSNotificationCreateRunLoopSource(onStateUpdate, (__bridge void *)(self));
if(mRunLoopSource) {
CFRunLoopAddSource(CFRunLoopGetCurrent(), mRunLoopSource, kCFRunLoopDefaultMode);
}
}
此代码是与HUD代码和NSLog的报道事件。 因此,我知道它实际上按预期运行,但操作系统只是“静音”或忽略NSSound,因为它没有失败。
我在做什么错?我怎样才能让它继续工作,因为这最终会成为一个包含通知的托盘应用程序。
所以读完一些线程后,如this。
我不敢说NSSound是从苹果:(另一混合型结果的API。
使用AudioToolbox是要走的路。 到目前为止长相,保持小时后工作。
这里是一个代码段(有点难看,但自我解释,使用方法):
NSString *audioFileName = @"MyResourceFileName";
NSURL *audioURLRef = [[NSBundle mainBundle] URLForResource:audioFileName
withExtension:@"mp3"];
SystemSoundID audioFileId = 0;
AudioServicesCreateSystemSoundID(
(__bridge CFURLRef) audioURLRef,
&audioFileId
);
// Plays the audio file using AudioServices...
AudioServicesPlaySystemSound(audioFileId);
- 记得导入AudioToolbox/AudioToolbox.h和进口由于IOKit/IOKitLib。 h(对于iOS我认为它是IOKit/UIKit.h并且当然包括框架...
是的,我对NSSound没有任何问题;它有大量的错误,并且在每个OS X版本中似乎都有不同的错误和不同的解决方法。很高兴有这个解决方法,谢谢。 – bhaller
我很高兴地说我已经测试了2天,现在看起来像预期的那样工作! –
你可以显示代码如何调用它吗? – rocky
我用更多的代码片段更新了我的问题。当然有一个CFRelease应用程序正在关闭。 –