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];
}
Это большое спасибо, сейчас он работает для меня. Не могли бы вы вкратце объяснить идею noob о мостике и о том, что именно она делает? – garethdn
Он был введен в ARC для обработки ref-counting при хранении на общий тип типа 'void *'. См. [ARC and bridged cast] (http://stackoverflow.com/questions/7036350/arc-and-bridged-cast) – Joe
Джо, не могли бы вы рассказать мне, как вызвать другой метод из метода 'completeCallback'. После того, как я изменил цвет текста, я попытался вызвать другой метод с помощью '[self anotherMethod]', но он не работает для меня. – garethdn