ตั้งค่าผู้รับมอบสิทธิ์ในชั้นเรียนอื่น

ฉันกำลังพยายามเขียนแอพ iPhone ตัวแรกของฉัน และฉันมีปัญหากับผู้รับมอบสิทธิ์

ฉันมีคลาสที่ใช้ AVAudioPlayer เพื่อเล่นเสียง จากนั้นฉันก็มีคลาสอื่นที่ต้องดำเนินการบางอย่างเมื่อเสียงนั้นเสร็จสมบูรณ์ ดังนั้นฉันต้องการคลาสนี้เพื่อใช้วิธี audioPlayerDidFinishPlaying ของเครื่องเล่นเสียง

ปัญหาคือ ฉันไม่สามารถหาวิธีทำให้คลาสที่สองของฉันเป็นตัวแทนเครื่องเล่นเสียงที่เป็นสมาชิกของคลาสเฟิสต์คลาสได้ ฉันสร้างวิธีการในคลาสแรกที่อ้างอิงถึงคลาสและรันเมธอด setDelegate ในเรื่องนี้ แต่เมธอด audioPlayerDidFinishPlaying ไม่เคยถูกเรียก อย่างไรก็ตาม หากฉันใช้เมธอด audioPlayerDidFinishPlaying ในคลาสแรก ก็ถือว่าใช้ได้ ฉันจะทำให้ audioPlayerDidFinishPlaying ถูกเรียกในคลาสที่สองได้อย่างไร

ดังนั้น รหัสที่ฉันใช้เพื่อเพิ่มผู้รับมอบสิทธิ์ ในชั้นเรียนแรกฉันมีวิธีนี้:

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

แล้วในชั้นสองฉันจะเรียกมันจากสิ่งนี้

[class1 setAudioDelegate:self];

person Sam Cogan    schedule 12.09.2010    source แหล่งที่มา
comment
คุณบอกว่าคุณได้ลองมอบหมายอินสแตนซ์ของ 'คลาสที่สอง' ของคุณให้เป็นผู้รับมอบสิทธิ์ของอินสแตนซ์ AVAudioPlayer แล้ว คุณสามารถโพสต์รหัสที่คุณทำเพื่อทำเช่นนั้นได้หรือไม่?   -  person imaginaryboy    schedule 13.09.2010
comment
@imaginaryboy ดูการอัปเดต   -  person Sam Cogan    schedule 13.09.2010
comment
ไม่มีสิ่งใดในโค้ดที่โพสต์นั้นดูผิดปกติ ยกโทษให้กับคำถามที่ชัดเจน แต่คุณแน่ใจว่าทั้ง 'class1' และ 'audioPlayer' ไม่ใช่ศูนย์ในเวลาที่ setAudioDelegate: โทรออก   -  person imaginaryboy    schedule 13.09.2010
comment
ข้อมูลนี้ไม่เพียงพอที่จะระบุสิ่งใดๆ คุณช่วยยืนยันได้ไหมว่าวิธีการนี้กำลังถูกเรียก? คุณช่วยยืนยันได้ไหมว่า audioPlayer ถูกตั้งค่าเป็นสิ่งที่มีความหมายเมื่อมีการเรียก [class1 setAudioDelegate:self] เรียกว่าวิธีใด? วิธีการ audioPlayerDidFinishPlaying: ของคลาสนั้นมีลักษณะอย่างไร   -  person Chuck    schedule 13.09.2010
comment
@imaginaryboy ใช่แล้ว มันยังไม่ได้รับการเริ่มต้น ณ จุดนั้น ควรหยุดมองหาคำตอบที่ซับซ้อน ขอบคุณมากครับ ตอนนี้ใช้งานได้แล้ว   -  person Sam Cogan    schedule 13.09.2010
comment
รังเกียจไหมถ้าฉันเขียนสิ่งนั้นเป็นคำตอบแล้วคุณยอมรับมัน? :)   -  person imaginaryboy    schedule 13.09.2010


คำตอบ (2)


ยืนยันว่าทั้ง 'audioPlayer' และ 'class1' ไม่ใช่ศูนย์เมื่อคุณพยายามตั้งค่าผู้รับมอบสิทธิ์เสียง

person imaginaryboy    schedule 12.09.2010

ผู้รับมอบสิทธิ์ทำงานในลักษณะหนึ่งต่อหนึ่ง หากคุณต้องการให้ความสัมพันธ์ระหว่างอินสแตนซ์ทำงานในลักษณะหลายต่อหลายหรือแบบหนึ่งต่อหลาย คุณอาจศึกษา การอ้างอิงคลาส NSNotification หรือ คู่มือการเขียนโปรแกรมการแจ้งเตือน

person AechoLiu    schedule 12.09.2010