Вопрос

У меня есть NSTIMER, который настроен так:

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];

Как я могу получить возвратную стоимость timerTarget метод?

Это было полезно?

Решение

Вы не можете, потому что нет возврата.

Quoth Документация scheduledTimerWithTimeInterval::::: метод:

Селектор должен иметь следующую подпись:

- (void)timerFireMethod:(NSTimer*)theTimer

Теперь ваша очередь мог Объявите свой метод по -другому, а затем возвращайте в него значение, но затем ваш метод имеет другую подпись, чем ожидает NSTIMER. Сейчас это будет работать нормально, но не будет гарантированно работать в будущем - оно может сломаться в любое время, особенно изменение во время выполнения.

Более того, поскольку NSTIMER не ожидает возвратной стоимости, у него нет положений, чтобы получить его и пропустить его куда угодно.

Более того, как я сказал в своем комментарии к ответу Адама, ваш звонок scheduledTimerWithTimeInterval::::: возвращается только один раз, и (как сказал Адам) это делает это сразу. Вы не получаете ни одного возвращаемого значения каждые 0,5 секунды, потому что вы не получаете ни одного возврата каждые 0,5 секунды - вы получаете один возврат Только (по таймеру).

Какую бы информацию вы не узнали в своем методе таймера, вам нужно либо действовать на нем, либо отправить сообщение с информацией оттуда на другой метод.

Другие советы

Что вы делаете с возвратной стоимостью? Цель запускается асинхронно 0,5 секунды спустя. Призыв к scheduledTimerWithTimeInterval:target:selector:useInfo:repeats: Возвращает мгновенно, после чего цель не была запущена. Если вам действительно нужна возвратная стоимость прямо сейчас, тогда не беспокойтесь о таймере и просто называйте селектор нормально.

После хорошего ответа Адама, если вы чувствуете, что вам нужна возвратная стоимость целевого метода после того, как он заканчивает запуск, то вы, вероятно, хотите сделать, так это иметь целевой метод увековечить некоторые дальнейшие действия.

Например, вы можете использовать параметр «userInfo» для передачи ссылки на заинтересованный объект (SEFT?). Целевой метод может тогда вместо возвращения значения, отправить обновленное значение для себя с предварительно оранжевым селектором. Например, в вашем целевом методе вы можете закончить что -то вроде:

[[theTimer userInfo] setWhatever:blah];

Концептуально вам нужно принять совет Адама и рассмотреть тот факт, что метод, вызванный таймером, происходит в будущем, и если вы хотите подключиться к определенному классу и его рабочему процессу, вам нужно как -то подключить его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top