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