hủy thực hiện hàng đợiSelector: các cuộc gọi afterDelay


115

có ai biết liệu có thể hủy các sự kiện bộ chọn đã xếp hàng từ ngăn xếp sự kiện hoặc ngăn xếp thời gian không (hoặc bất kỳ cơ chế nào được API sử dụng) khi bạn gọi performSelector:withObject:afterDelay?

Tôi đã sử dụng ngăn xếp sự kiện này để thay đổi các thuộc tính của hình ảnh trong tab TabBar và đôi khi sẽ xếp hàng các thay đổi có giá trị lên tới 10 giây trong một lần thực hiện nhanh chóng cho vòng lặp ... có thể là 5 mili giây.

vấn đề phát sinh nếu người dùng chuyển tab ... như nói tôi có các thay đổi hình ảnh được xếp hàng cho một hình ảnh được hiển thị ngay khi Tab # 4 được bật, sau đó người dùng nhanh chóng chuyển sang Tab # 3 và sau đó quay lại ngay Tab # 4 ... điều này sau đó sẽ xếp hàng lại các thay đổi có giá trị 10 giây khác trong khi hàng đợi cũ vẫn đang phát, có thể khoảng 2 hoặc 3 giây trong hàng đợi nếu được chuyển đủ nhanh ... nhưng thậm chí đến 5 giây sau dòng là một vấn đề.

vì vậy tôi cần một số cách để hủy bỏ ngăn xếp thay đổi cũ trước khi đặt một ngăn xếp mới vào ...

Tôi đang viết truy vấn này ở thì quá khứ bởi vì tôi đã đưa ra một giải pháp thay thế cho vấn đề này bằng cách thêm bộ lọc sự kiện mắt diều hâu vào chức năng phát lại. tuy nhiên tôi vẫn tò mò liệu có thể hủy bỏ sự kiện không, vì tôi có cảm giác kiến ​​thức như vậy sẽ có ích trong tương lai. cảm ơn bạn đã hỗ trợ


Làm thế nào bạn có thể sử dụng bộ lọc sự kiện mắt diều hâu trên chức năng phát lại?
Maniganda saravanan

Câu trả lời:


241
[NSObject cancelPreviousPerformRequestsWithTarget:]

hoặc là

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

Đây targetlà đối tượng ban đầu performSelector:afterDelay:được gọi.

Ví dụ:

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

Xem tài liệu táo , nó ở ngay cuối performSelector:withObject:afterDelay:mô tả.


33
Để biết rõ hơn về cách sử dụng, hãy thử điều này: [NSObject CancPreinglyPerformRequestsWithTarget: self];
dnstevenson

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

2

Để hủy tất cả các yêu cầu thực hiện trước đó, bạn có thể sử dụng:

[NSObject cancelPreviousPerformRequestsWithTarget:self];   

2

Nếu bạn đang tìm kiếm "PerformanceSelector" để có kết quả khớp " cancelPreviousPerformSelector" ... thì không. (Ugh, Apple, tại sao bạn làm điều đó với tôi ???)

Các phương thức, er, ah, "khớp" là:

performSelector

cancelPreviousPerformRequestsWithTarget

(Chỉ để làm cho nó thêm khó nhớ, mà không cần tìm kiếm tài liệu.)


1

Kiểm tra tài liệu NSRunLoop. Bạn muốn-cancelPerformSelectorsWithTarget:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.