การยกเลิกการเข้าคิว performSelector: afterDelay โทร


115

มีใครทราบบ้างว่าเป็นไปได้หรือไม่ที่จะยกเลิกเหตุการณ์ตัวเลือกที่จัดคิวไว้แล้วจากสแต็กเหตุการณ์หรือสแต็กตัวจับเวลา (หรือกลไกใดก็ตามที่ API ใช้) เมื่อคุณโทรperformSelector:withObject:afterDelay?

ฉันใช้สแต็กเหตุการณ์นี้เพื่อแก้ไขแอตทริบิวต์ของรูปภาพภายในแท็บ TabBar และบางครั้งอาจจัดคิวการเปลี่ยนแปลงที่มีมูลค่าสูงสุด 10 วินาทีในหนึ่งครั้งที่ดำเนินการอย่างรวดเร็วสำหรับการวนซ้ำ ... อาจจะ 5 มิลลิวินาทีหรือมากกว่านั้น

ปัญหาเกิดขึ้นหากผู้ใช้สลับแท็บ ... เช่นบอกว่าฉันมีการปรับเปลี่ยนรูปภาพในคิวสำหรับรูปภาพที่แสดงทันทีที่เปิดใช้งานแท็บ # 4 จากนั้นผู้ใช้จะเปลี่ยนไปใช้แท็บ # 3 อย่างรวดเร็วจากนั้นกลับไปที่แท็บ # 4 ... จากนั้นจะจัดคิวใหม่อีก 10 วินาทีของการแก้ไขในขณะที่คิวเก่ายังคงเล่นอยู่อาจจะอยู่ที่คิวประมาณ 2 หรือ 3 วินาทีหากเปลี่ยนเร็วพอ ... แต่ถึง 5 วินาทีในการ สตรีมมีปัญหา

ดังนั้นฉันจึงต้องการวิธียกเลิกการเปลี่ยนแปลงสแต็กเก่าก่อนที่จะใส่สแต็กใหม่ ...

ฉันกำลังเขียนข้อความค้นหานี้ในอดีตกาลเนื่องจากฉันได้หาทางเลือกอื่นในการแก้ปัญหานี้โดยการเพิ่มตัวกรองเหตุการณ์ที่มีตาเหยี่ยวในฟังก์ชันการเล่น อย่างไรก็ตามฉันยังคงสงสัยว่าจะสามารถยกเลิกกิจกรรมได้หรือไม่เพราะฉันรู้สึกว่าความรู้ดังกล่าวจะเป็นประโยชน์ในอนาคต ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่แสดง :)


คุณจะใช้ตัวกรองเหตุการณ์ตาเหยี่ยวกับฟังก์ชันการเล่นได้อย่างไร?
Maniganda saravanan

คำตอบ:


241
[NSObject cancelPreviousPerformRequestsWithTarget:]

หรือ

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

targetเป็นวัตถุเดิมที่performSelector:afterDelay:ถูกเรียกว่า

ตัวอย่างเช่น:

// schedule the selector
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0];
// cancel the above call (and any others on self)
[NSObject cancelPreviousPerformRequestsWithTarget:self];

ดูapple docsอยู่ตรงท้ายperformSelector:withObject:afterDelay:คำอธิบาย


33
สำหรับคำชี้แจงเกี่ยวกับการใช้งานให้ลองทำดังนี้: [NSObject CancelPreviousPerformRequestsWithTarget: self];
dnstevenson

[NSObject CancelPreviousPerformRequestsWithTarget: self selector: @selector (mySel :) object: nil];
webtrick101


2

หากคุณกำลังมองหา "performSelector" เพื่อให้มีการจับคู่ " cancelPreviousPerformSelector" ... มันไม่มี (ฮึแอปเปิ้ลทำไมคุณทำกับฉัน ???)

วิธีการ "จับคู่" คือ:

performSelector

cancelPreviousPerformRequestsWithTarget

(เพียงเพื่อให้ยากต่อการจดจำโดยไม่ต้องค้นหาเอกสาร)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.