Pertanyaan CFURLRef membutuhkan kesalahan cast bridge


Saya mencoba mendapatkan suara untuk dimainkan tetapi ketika saya mengkodekan:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject);

itu melempar kesalahan berikut:

Cast dari Objective-C pointer tipe 'NSURL *' ke C pointer ketik 'CFURLRef' (alias 'const struct __CFURL *') membutuhkan kesalahan cast bridge

Saya telah mencoba kedua dari dua solusi yang disarankan berikut ini:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

atau

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject);

Tapi aku masih belum bisa mendengar suaranya.

Saya kira pertanyaannya adalah: apakah kesalahan menjembatani penyebab suara tidak diputar, atau haruskah saya mencari yang lain di mana?

Saya bisa mendapatkan suara untuk bermain menggunakan kode contoh SysSound dan saya menggunakan iOS 6 dan Xcode 4.5.

Terima kasih untuk semua petunjuk :)


5
2017-07-28 19:17


asal


Jawaban:


Pemeran mungkin bukan alasan suara tidak diputar:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

baik-baik saja.

Kemungkinan besar kesalahan Anda dalam kode yang belum Anda tunjukkan kepada kami. Masalah umum adalah kesalahan dalam pembuatan URL atau format file yang tidak valid.

Ubah kode Anda sebagai berikut:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject);
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status);

dan periksa kode status apa yang Anda dapatkan; parmErr (-50) relatif umum dan biasanya berarti URL Anda tidak ada.

Oh, dan satu lagi pemikiran, Anda tidak menunjukkan di mana Anda benar-benar memainkan suara. Anda tahu itu AudioServicesCreateSystemSoundID tidak benar-benar memainkan suara. Anda perlu menelepon:

AudioServicesPlaySystemSound(soundFileObject);

Mohon maaf jika Anda sudah tahu itu!


9
2017-07-28 19:50