1

UILabelwithを渡そうとしていますが、メソッドAudioServicesAddSystemSoundCompletion内で値を操作できません。completionCallback私はARCを使用しており、Xcodeはを追加することを提案しまし(_bridge void*)た。

どんな助けでも大歓迎です。

-(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];
}
4

1 に答える 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];
}
于 2012-05-16T13:34:54.663 に答える