AudioServicesPlaySystemSound不播放,除非我跳过

时间:2013-05-22 16:58:57

标签: ios uitableview

我正在编写一个闹钟应用程序,我需要让用户选择要唤醒的铃声。我有一个带有我的声音列表的UITableView,当用户点击我希望它播放的声音时。

然而,除非我跨过调用到AudioServicesPlaySystemSound(或者我在听到声音后触发的AudioServicesDisposeSystemSoundID调用上设置断点),否则我的声音不会播放。

我有一个理论认为这是一个主线程问题所以我使用了performSelectorOnMainThread:

        [self performSelectorOnMainThread:@selector(playWakeUpSound)
                               withObject:nil
                            waitUntilDone:true];

但这没有帮助。 (waitUntilDone的值似乎并不重要。)

This question很有希望,但我检查了一下,我只调用了我的方法一次。

1 个答案:

答案 0 :(得分:1)

这只是猜测,因为我不知道playWakeUpSound中有什么。如果你在该调用和ARC中使用AVAudioPlayer,可能是因为它正在发布。将AVAudioPlayer的实例存储为类的成员,它应该播放。

@interface MyClass 
{
    AVAudioPlayer *player;
}

@end

然后在实施中:

@implementation MyClass

- (void)playWakeUpSound {
    // Assuming name and extension is set somewhere.
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:name ofType:extension]];

    NSError* error = nil;

    player = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:&error];
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    } else  {
        [player play];
    }
}

@end