AudioServicesAddSystemSoundCompletion: как использовать параметр void *?

Я хочу воспроизвести два звука, но последний только после окончания первого.

Я использую 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 без кастинга, и эта идея не сработала и для меня.

Вы можете мне помочь?

Заранее спасибо.

1
задан Community 23 May 2017 в 12:26
поделиться