2009-07-20 7 views
2

Мне интересно, есть ли способ запускать функцию каждую минуту в какао. Я лично использую это для сохранения контента, поскольку пользователь набирает его на случай, если они уйдут. Но я видел, что этот эффект также используется в клиентах Twitter. Когда пользователь держит окно открытым, он будет автоматически обновлять каждые x минут без ввода от пользователя. Кажется, что это распространено, и язык позволяет это, я просто не могу найти документацию на нем.Функция запуска каждую минуту в какао

Спасибо за помощь!

ответ

6

Я лично использую это для сохранения контента, поскольку пользователь набирает его на случай, если они уйдут. Но я видел этот эффект, который также использовался в клиентах Twitter.

Лучшее решение было бы быть делегатом Вида текста, и реагировать на textDidChange: путем создания неповторяющихся таймера (если вы еще не сделали этого, или он уже уволен) и установив его дату пожара до X секунд в будущем. Затем пользователь теряет не более чем на X секунд работы, а не на одну минуту, а таймер не срабатывает, когда пользователь ничего не набрал.

+0

Привет, Питер: Я обязательно посмотрю на это. – PF1

+0

Peter: Кажется, что это работает очень хорошо, но при вводе текста окно приложения сильно задерживается. Я считаю, что это потому, что он сохраняет файл на диск при каждом запуске функции. Я не выполнял таймер этой функции, так как я не совсем знал, как заставить его не создавать новый таймер при каждом запуске функции. Я предполагаю, что это решит мою проблему, но я не совсем уверен, как это сделать. Есть идеи? – PF1

+1

Когда таймер срабатывает, отпустите его (если вы сохранили его ранее) и установите переменную, удерживающую ее «nil». Затем вы можете проверить в 'textDidChange:' существует ли таймер или нет. Кроме того, не вызывайте функцию (или отправляйте сообщение) непосредственно из 'textDidChange:'; просто создайте таймер и позвольте ему отправить сообщение, когда оно срабатывает. –

2

Отъезд NSTimer docs. Он делает именно то, что вы хотите. Вы создаете NSTimer, который будет повторяться столько, сколько вы захотите, и вызовите определенную функцию с указанными аргументами.

+0

Hey Dan: Для этого нужен NSTimer. Раньше я изучал этот класс, но не знал, что вы можете использовать его для функций. Спасибо за вашу помощь. – PF1

+1

NSTimer не может вызвать функцию напрямую; он может отправлять сообщение только объекту. Ваш ответ на это сообщение может быть любым, что вы хотите, включая вызов функции. Тем не менее, я не могу думать о причине, почему вы сделаете это функцией; вы скорее всего просто сделаете автоматическое сохранение в методе. –

2

Я, лично, будет использовать это для экономии контента, как пользователь вводит его в случае они бросают

Затем вы хотите autosaving, который заботится о том, что для вас.

+0

@Graham Lee Будет ли это работать, хотя мои NSTextFields динамически добавляются на экран? – PF1

+0

Если текст, который они представляют, является частью модели документа, тогда да. – 2009-07-20 18:27:24

 Смежные вопросы

  • Нет связанных вопросов^_^