W zasadzie mam ten timer, który powinien zostać powtórzony po odebraniu zdarzenia klucza i unieważnia się, gdy użytkownik zwolni klucz. Jednak nie jestem w stanie "zweryfikować" licznika czasu nawet przez wywołanie addTimer:forMode:
w NSRunLoop. Czy ktoś wie, dlaczego tak się dzieje i jak mogę to naprawić? Dzięki.Jak "sprawdzić poprawność" NSTimer po unieważnieniu go?
Odpowiedz
Nie można użyć unieważnionego licznika czasu.
od Apple Docs:
Po zaplanowano na pętli biegu, pożary czasomierza w określonym przedziale dopóki nie zostanie unieważniony. Nieodtwarzający się zegar unieważnia natychmiast po uruchomieniu. Jednak w przypadku powtarzającego się zegara użytkownik musi samodzielnie unieważnić obiekt czasomierza, wywołując jego unieważnioną metodę: . Wywołanie tej metody wymaga usunięcia timera z bieżącej pętli prądowej ; w związku z tym należy zawsze wywoływać metodę unieważniającą z tego samego wątku, w którym zainstalowano timer. Unieważnienie licznika powoduje natychmiastowe wyłączenie go, dzięki czemu nie ma już wpływu na pętlę uruchamiania. Pętla uruchamiania następnie usuwa i zwalnia timer, albo tuż przed powrotem metody unieważniającej, albo w pewnym późniejszym punkcie . Po unieważnieniu obiekty timera nie mogą być ponownie użyte.
Po unieważnieniu NSTimer nie powinieneś używać go ponownie.
Zamiast tego utwórz nową instancję licznika czasu i użyj tej instancji, aby dodać do metody addTimer NSRunLoop. Osobiście wolę po prostu wywoływać zaplanowanyTimerWithTimeInterval NSTimer, ponieważ robi wszystko w jednym ujęciu.
Od NSTimer docs:
Wywołanie tej metody żąda usunięcia timer z pętli prądowej run; w związku z tym należy zawsze wywoływać metodę unieważniającą z tego samego wątku, w którym zainstalowano timer. Unieważnienie wartości powoduje natychmiastowe wyłączenie licznika czasu, tak aby nie wpływało już na przebieg pętli. Pętla uruchamiania następnie usuwa i zwalnia timer, albo po prostu przed zwróceniem metody unieważnienia lub w jakimś późniejszym punkcie. Po unieważnieniu obiekty timera nie mogą być ponownie użyte.
Dobra, nie wiedziałem tego ... Dzięki! – TheAmateurProgrammer
- 1. Jak sprawdzić poprawność tablicy?
- 2. Jak sprawdzić poprawność wyrażenia regularnego?
- 3. Aktualizowanie sesji po unieważnieniu indywidualnych uprawnień
- 4. Jak sprawdzić poprawność daty MYSQL w PHP?
- 5. jak sprawdzić poprawność identyfikatora powiązanego modelu?
- 6. Jak sprawdzić poprawność XHTML za pomocą nokogiri?
- 7. NSTimer nie zatrzymuje się
- 8. Jak sprawdzić poprawność dwóch pól dla unikalności
- 9. Jak mogę sprawdzić poprawność wyjścia XmlSerializer?
- 10. Jak sprawdzić poprawność aktualizacji przed instalacją
- 11. Jak sprawdzić poprawność wybranej wartości w DropDownList?
- 12. Elixir Ecto: Jak sprawdzić poprawność klucza obcego?
- 13. Jak sprawdzić poprawność adresu IP w Pythonie?
- 14. Jak sprawdzić poprawność obiektu JSON w java?
- 15. Jak sprawdzić poprawność xml z php
- 16. Jak sprawdzić poprawność pola wyboru w nokaucie
- 17. Jak sprawdzić, czy NSTimer działa, czy nie w Swift?
- 18. Jak sprawdzić poprawność pliku xml dla danego pliku xsd podczas analizowania go za pomocą analizatora sax?
- 19. Jak sprawdzić, czy NSTimer jest aktywny czy nie?
- 20. Jak sprawdzić poprawność pliku html za pomocą C#?
- 21. Jak zatrzymać NSTimer
- 22. sprawdzić poprawność składni plików PHP bardziej efektywnie
- 23. Jak sprawdzić poprawność formularza w Magento Javascript podczas pisania
- 24. Jak sprawdzić poprawność mapy witryny zgodnej z XML?
- 25. Jak sprawdzić poprawność pola przy aktualizacji w DRF?
- 26. Jak sprawdzić poprawność danych FormView podczas korzystania z EnableModelValidation?
- 27. NSTimer - jak opóźnić Swift
- 28. Jak powstrzymać/unieważnić NStimer
- 29. Jak zatrzymać NSTimer?
- 30. Jak zatrzymać zdarzenie NStimer?
Interesujące jest to, że istnieje addTimer NSRunLoop, ale nie ma metody removeTimer, która mogłaby być użyta do zatrzymania stopera od wystrzelenia bez unieważniania go. Musi być tak, że tworzenie zegara jest tańsze niż tworzenie portów, więc jabłko nie zawracało sobie głowy dodawaniem tego api. –