Я хочу воспроизвести два звука, но последний только после окончания первого.
Я использую 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, так что извините, если это глупый вопрос. Приведение работает нормально, но когда я пытаюсь получить доступ к первой позиции, происходит плохое выполнение. Я действительно не понимал, почему тип void*. Что это значит?
В этом заголовке other post парень передал UIButton без приведения, и эта идея тоже не сработала для меня.
Вы можете помочь мне?
Заранее спасибо.