我想播放两个声音,但最后一个声音仅在第一个结束后播放。
我正在使用AudioServicesAddSystemSoundCompletion:
NSArray *data = [NSArray arrayWithObjects:target, callback, nil];
NSString *soundPath = [bundle pathForResource:sound ofType:type];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, playSoundFinished, data);
AudioServicesPlaySystemSound(soundID);
和我的playSoundFinished方法:
static void playSoundFinished(SystemSoundID soundID, void *data) {
NSArray *data_ = (NSArray *)data;
id obj = [data_ objectAtIndex:0];
SEL method = NSSelectorFromString([data_ objectAtIndex:1]);
[obj performSelector:method];
}
文档统计信息,最后一个参数必须是void*
,并且它是在回调方法中工作的数据,但是如何使用我传递的NSArray作为参数?我是C和Objective-C的新手,很抱歉,如果这是一个愚蠢的问题。转换工作正常,但是当我尝试访问第一个位置时,会发生错误的执行。我真的不明白为什么无效*类型。这意味着什么?
在这个other post中,这个家伙在没有任何演员的情况下传递了UIButton,这个想法对我来说也不起作用。
你能帮助我吗?
提前致谢。
答案 0 :(得分:2)
在将NSArray作为void *传递给完成例程之前,您需要将其保留在某处。操作系统不能这样做,因为它甚至不知道void *是否是一个对象。