Приложение Simple Clock: использовать делегирование или обратный вызов каждую секунду? - PullRequest
1 голос
/ 24 октября 2011

Мне весело с целью c.Как простая программа, я хотел написать приложение для часов.

По сути, UITextField должен показывать текущее время и обновлять каждую секунду.

Сначала я хотел использовать делегирование и позволить UITextField вызыватьназад класс, когда происходит событие «Значение изменено».«Начав загрузку» с изменения начального значения (например, установив время при запуске приложения), я подумал, что впоследствии смогу непрерывно вызывать событие «Значение изменено» (UITextField будет постоянно меняться сам, следовательно, вызывая метод делегата).Я перепробовал много вещей, но это никогда не работало.Я даже пытался создать кнопку, которая установила бы для UITextField произвольное текстовое значение (в отличие от установки UITextField при запуске) в надежде, что будет вызван делегированный метод, но и этого не произошло.Чтобы доказать, что мой код был верным, время было обновлено, когда я использовал другие действия, такие как «Touch Down», например: я получал время на каждом клике в UITextField.

В конце концов я обнаружил, чтоя мог бы использовать обратный вызов каждую секунду, используя [self executeSelector ...], и это сработало.

Есть ли фундаментальная причина, по которой моя делегация, использующая действие 'Value Changed', никогда не работала?

1 Ответ

1 голос
/ 24 октября 2011

Событие изменения значения срабатывает только в ответ на пользовательское событие, т. Е. Вы устанавливаете textField.text = "something", а не запускаете его по своему замыслу.это не очень хорошая работа, потому что, судя по звукам, вы пытались запустить свое приложение в бесконечный цикл.Если событие «значение изменилось» действительно сработало, когда вы установили текст в поле, программа снова запросит делегата, который снова установит текст, и снова попросит делегата ..... вы получите изображение.Это называется бесконечный цикл , и это приводит к зависанию программы, а затем к аварийному завершению, поскольку выполнение программы не может выйти из этого цикла.

В любом случае, чтобы сделать то, что вы говорите, у вас есть две опции

  1. вы можете настроить объект NSTimer для вызова вашего метода обновления времени каждую секунду.Это довольно просто, посмотрите документацию .

  2. performSelector:withObject:afterDelay:.Похоже, вы уже поняли это.Это не так аккуратно, как использование NSTimer, но оно сделает эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...