Я использовал NSTimer успешно, но теперь испытываю затруднения из-за него. Несомнительно что-то глупое. Цените другую пару глаз. Выполняя отладчик, я вижу, что applicationDidFinishLaunching называют, но триггер никогда не называют.
-(void) trigger:(NSTimer *) theTimer{
NSLog(@"timer fired");
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
nst = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(trigger) userInfo:nil repeats:YES];
[window makeKeyAndVisible];
}
Селектор должен иметь следующую сигнатуру:
- (void)timerFireMethod:(NSTimer*)theTimer
, поэтому вам понадобится
@selector(trigger:)
- edit -
Возможно, вы делаете это где-то еще, но в коде, который вы включили, вы фактически не запускаете таймер. Вы должны добавить его в NSRunLoop, прежде чем он вообще сможет инициировать какие-либо события.
[[NSRunLoop currentRunLoop] addTimer:nst forMode:NSDefaultRunLoopMode];
Если я правильно прочитал примеры. Я использовал только тот метод инициализации, который автоматически добавляет его к текущему NSRunLoop. Вам действительно стоит посмотреть документацию разработчика, которую кто-то добавил в комментарии к моему сообщению.
Две вещи:
1) как говорят другие, метод должен иметь следующую подпись. .
-(void) trigger:(NSTimer *) theTimer;
и вы делаете таймер таким образом:
nst = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(trigger:) userInfo:nil repeats:YES];
2) простое создание таймера не запускает его. Как в документации сказано :
Вы должны добавить новый таймер в цикл выполнения , используя addTimer: forMode :. Затем по истечении секунд таймер срабатывает, вызывая вызов. (Если таймер настроен на повторение, нет необходимости впоследствии повторно добавлять таймер в цикл выполнения.)
Вот пример реального функционирования код, который можно смоделировать после. Создание таймера такое же, как и у вас, но оно также правильно добавляет его в цикл выполнения.
[[NSRunLoop currentRunLoop] addTimer:
[NSTimer timerWithTimeInterval:0.1
target:self
selector:@selector(someSelector:)
userInfo:nil
repeats:NO]
forMode:NSDefaultRunLoopMode];
Селектор, который вы даете таймеру, trigger
, указывает, что он должен вызывать метод, не принимающий параметров. Либо измените запускаемый таймером метод на
- (void)trigger
{
// look at me, I don't take any parameters
NSLog(@"timer fired");
}
, либо измените свой первоначальный вызов таймера, чтобы использовать @selector (trigger:)
.