2012-05-16 5 views
1

Я пытаюсь передать UILabel с AudioServicesAddSystemSoundCompletion, но я не могу манипулировать значением в методе completionCallback. Я использую ARC, и Xcode предложил добавить (_bridge void*).Передача аргументов с помощью AudioServicesAddSystemSoundCompletion

Любая помощь будет высоко оценена.

-(void) playWordSound:(UILabel *)label 
{ 
    NSString *path; 
    SystemSoundID soundId; 
    switch (label.tag) 
    { 
     case 1: 
      .......... 
      break; 
    } 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    AudioServicesCreateSystemSoundID((CFURLRef)objc_unretainedPointer(url), &soundId); 
    AudioServicesPlaySystemSound(soundId); 
    AudioServicesAddSystemSoundCompletion (soundId, NULL, NULL, 
              completionCallback, 
              (__bridge void*) label); 
} 


static void completionCallback (SystemSoundID mySSID, void* data) { 
    NSLog(@"completion Callback"); 
    AudioServicesRemoveSystemSoundCompletion (mySSID); 
    //the below line is not working 
    //label.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
} 

ответ

3

В обработчик завершения метка хранится в data. Вам нужно вернуть __bridge, чтобы использовать его.

static void completionCallback (SystemSoundID mySSID, void* data) { 
    NSLog(@"completion Callback"); 
    AudioServicesRemoveSystemSoundCompletion (mySSID); 
    UILabel *label = (__bridge UILabel*)data; 
    label.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
} 
+0

Это большое спасибо, сейчас он работает для меня. Не могли бы вы вкратце объяснить идею noob о мостике и о том, что именно она делает? – garethdn

+1

Он был введен в ARC для обработки ref-counting при хранении на общий тип типа 'void *'. См. [ARC and bridged cast] (http://stackoverflow.com/questions/7036350/arc-and-bridged-cast) – Joe

+0

Джо, не могли бы вы рассказать мне, как вызвать другой метод из метода 'completeCallback'. После того, как я изменил цвет текста, я попытался вызвать другой метод с помощью '[self anotherMethod]', но он не работает для меня. – garethdn