2009-10-28 25 views
28

Tôi có một cái gì đó như thế này:Cách tìm NSTimer có hoạt động hay không?

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                target:self 
               selector:@selector(updateCountdown) 
               userInfo:nil 
                repeats:YES]; 

tôi cập nhật văn bản của một nhãn sử dụng timer này. Không phải ở một điều kiện nhất định, tôi muốn kiểm tra xem bộ hẹn giờ có hoạt động không, sau đó làm mất hiệu lực bộ hẹn giờ. Câu hỏi của tôi là làm thế nào để tôi thấy rằng bộ đếm thời gian đang hoạt động hay không?

Trả lời

67

Khi bộ đếm thời gian không lặp lại tự động đánh dấu, nó tự đánh dấu là không hợp lệ để bạn có thể kiểm tra xem nó có còn hợp lệ hay không trước khi hủy (và dĩ nhiên sau đó tự mình thoát).

if ([timer isValid] && yourOtherCondition){ 
    [timer invalidate], timer=nil; 
} 

Trong trường hợp bạn có bộ hẹn giờ lặp lại để nó luôn có hiệu lực cho đến khi bạn thực hiện một số hành động làm mất hiệu lực. Dường như trong trường hợp này, bạn đang chạy đếm ngược, do đó bạn có thể đảm bảo rằng bạn đã vô hiệu hóa và thoát khỏi chính mình khi đếm ngược đạt đến giá trị mong muốn (Trong phương thức updateCountdown)

+0

Ví dụ tuyệt vời! Cảm ơn – Genevios

5

Giữ bộ hẹn giờ trong biến mẫu và đặt timer = nil khi không có bộ hẹn giờ chạy (tức là sau khi bạn gọi [timer invalidate]). Sau đó, để kiểm tra xem bộ hẹn giờ có đang hoạt động hay không, bạn chỉ có thể kiểm tra xem timer == nil.

1

Trong Swift, bạn có thể sử dụng các isValid boolean để xem nếu bộ đếm thời gian đang chạy:

if timer.isValid { 
    // Do stuff 
} 

Từ Apple docs:

Một giá trị boolean cho biết xem máy thu hiện đang hợp lệ. (chỉ đọc)

true nếu người nhận vẫn có khả năng kích hoạt hoặc sai nếu bộ hẹn giờ đã bị vô hiệu và không còn khả năng kích hoạt nữa.

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