Tetapkan delegasi di kelas yang berbeda

Saya mencoba menulis aplikasi iPhone pertama saya dan saya mengalami masalah dengan delegasi.

Saya memiliki kelas yang menggunakan AVAudioPlayer untuk memutar beberapa suara, saya kemudian memiliki kelas lain yang saya perlukan untuk melakukan sesuatu ketika suara itu selesai. Jadi saya memerlukan kelas ini untuk mengimplementasikan metode audioPlayerDidFinishPlaying pada pemutar audio.

Masalahnya, saya tidak tahu bagaimana menjadikan kelas kedua saya sebagai delegasi pemutar audio yang merupakan anggota kelas pertama. Saya membuat metode di kelas pertama yang mengambil referensi ke kelas dan menjalankan metode setDelegate ini, tetapi metode audioPlayerDidFinishPlaying tidak pernah dipanggil. Namun jika saya menerapkan metode audioPlayerDidFinishPlaying di kelas pertama, itu akan dianggap baik-baik saja. Bagaimana saya bisa memanggil audioPlayerDidFinishPlaying di kelas kedua?

Jadi, kode yang saya gunakan untuk menambahkan delegasi, di kelas pertama saya punya metode ini:

-(void) setAudioDelegate:(id)delegate{
    [audioPlayer setDelegate:delegate];
}

lalu di kelas kedua saya memanggilnya dari ini

[class1 setAudioDelegate:self];

person Sam Cogan    schedule 12.09.2010    source sumber
comment
Anda mengatakan Anda sudah mencoba menugaskan sebuah instance dari 'kelas kedua' Anda sebagai delegasi dari instance AVAudioPlayer. Bisakah Anda memposting kode yang Anda lakukan untuk melakukan itu?   -  person imaginaryboy    schedule 13.09.2010
comment
@imaginaryboy lihat pembaruan   -  person Sam Cogan    schedule 13.09.2010
comment
Tidak ada apa pun dalam kode yang diposting itu yang terlihat salah. Maafkan pertanyaan yang sudah jelas, tetapi Anda yakin 'class1' dan 'audioPlayer' tidak nihil pada saat panggilan setAudioDelegate: dilakukan?   -  person imaginaryboy    schedule 13.09.2010
comment
Informasi ini tidak cukup untuk menentukan apa pun. Bisakah Anda mengonfirmasi bahwa metode ini dipanggil? Bisakah Anda mengonfirmasi bahwa audioPlayer disetel ke sesuatu yang berarti saat dipanggil? Dalam metode apa [class1 setAudioDelegate:self] itu dipanggil? Seperti apa metode audioPlayerDidFinishPlaying: kelas itu?   -  person Chuck    schedule 13.09.2010
comment
@imaginaryboy ya, saat itu belum diinisialisasi, sebaiknya berhenti mencari jawaban yang rumit. Terima kasih banyak, berfungsi sekarang.   -  person Sam Cogan    schedule 13.09.2010
comment
Keberatan jika saya menuliskannya sebagai jawaban dan Anda menerimanya? :)   -  person imaginaryboy    schedule 13.09.2010


Jawaban (2)


Konfirmasikan bahwa 'audioPlayer' dan 'class1' tidak nihil pada saat Anda mencoba mengatur delegasi audio.

person imaginaryboy    schedule 12.09.2010

Delegasi bekerja dengan cara satu lawan satu. Jika Anda ingin hubungan antar instance berfungsi dalam cara banyak-ke-banyak atau satu-ke-banyak, mungkin Anda dapat mempelajari Referensi kelas NSNotification, atau Panduan Pemrograman Notifikasi.

person AechoLiu    schedule 12.09.2010