2011-02-15 32 views
6

Tôi muốn có thể hủy từng bộ chọn bị trì hoãn. Tôi có thể làm với mình với [NSObject cancelPreviousPerformRequestsWithTarget...] nhưng cần tất cả các tham số phương pháp để làm điều này. Tại thời điểm tôi muốn hủy bỏ, tôi không có chúng.Tôi có thể lấy danh sách các bộ chọn bị trì hoãn với performSelector: withObject: afterDelay :?

Có cách nào để lấy danh sách các bộ chọn bị trễ cùng với các tham số được sử dụng để trì hoãn các bộ chọn không?

Giải pháp thay thế là chỉ theo dõi các tham số, tất nhiên. Hoặc để sử dụng GCD và làm cho các bộ chọn của tôi (hiện là các khối) kiểm tra xem liệu chúng có nên quay trở lại ngay lập tức hay không.

Trả lời

0

không trực tiếp. một cách dễ dàng để thực hiện điều này là sử dụng NSOperation - sau đó chỉ giữ tham chiếu đến các hoạt động bạn có thể cần hủy trong tương lai.

+0

Quên để menton: mã là lái xe một phần của giao diện, vì vậy tôi phải giữ nó trên các chủ đề chính. Đó là lý do tại sao tôi không ném NSOperation vào hỗn hợp. –

+0

hmmm ... có vẻ như bạn sẽ phải viết một cái gì đó để thực hiện điều này = \ ngoài các tùy chọn bạn đã đề cập trong OP, bạn có thể đăng ký với vòng lặp chạy chính (bạn có thể phải đi đến API CF) và sau đó sử dụng NSInvocations cho hàng đợi tin nhắn. Ngoài ra, bạn có thể tạo kiểu trình bao bọc cho các lời gọi nhóm, sau đó sử dụng 'cancelPreviousPerformRequestsWithTarget' mà không có tham số không xác định. cuối cùng, các thông báo này có thể gọi thông qua một kiểu tùy chỉnh, thực thi 'isEqual:'. sau đó bạn có thể sử dụng một tùy chỉnh thực hiện của isEqual để xác định những tin nhắn để hủy bỏ. – justin

Các vấn đề liên quan