我需要任意启动一个NSTimer,它将每N秒重复一次,直到我停止它为止。 不重复。
我已经尝试过SO解决方案描述了here,here和here。接受的答案均无效。
这就是我所做的。我的UIViewController正在调用:
[AppDelegate doStartMessageRefresh];
在AppDelegate.m中:
#define MESSAGE_REFRESH_INTERVAL_SECONDS 3.0
@property (nonatomic, retain, strong) NSTimer *messageRefreshTimer;
- (void) doInvokerForDoStartMessageRefresh
{
NSLog(@"%s", __FUNCTION__);
NSLog(@"%@", [self.messageRefreshTimer fireDate]);
}
- (void) doStartMessageRefresh {
NSLog(@"%s", __FUNCTION__);
/*
self.messageRefreshTimer = [NSTimer scheduledTimerWithTimeInterval:MESSAGE_REFRESH_INTERVAL_SECONDS
target:self
selector:@selector(doInvokerForDoStartMessageRefresh)
userInfo:nil
repeats:YES];
*/
self.messageRefreshTimer = [NSTimer timerWithTimeInterval:MESSAGE_REFRESH_INTERVAL_SECONDS
target:self
selector:@selector(doInvokerForDoStartMessageRefresh)
userInfo:Nil
repeats:YES];
// [self.messageRefreshTimer fire];
//[[NSRunLoop currentRunLoop] addTimer:self.messageRefreshTimer forMode:NSRunLoopCommonModes];
[[NSRunLoop currentRunLoop] addTimer:self.messageRefreshTimer forMode:NSDefaultRunLoopMode];
}
打印出来的唯一日志行是:
2014-05-02 16:34:20.248 myappnamehere[9977:6807] -[AppDelegate doStartMessageRefresh]
如果我取消注释该行[self.messageRefreshTimer fire];它运行一次。
如果我将选择器制定为:@selector(doInvokerForDoStartMessageRefresh :)并手动触发,则会收到无法识别的选择器
最佳答案
您的方法签名错误。应该是doInvokerForDoStartMessageRefresh:
和doInvokerForDoStartMessageRefresh:(NSTimer *)timer
,而不是doInvokerForDoStartMessageRefresh
。注意:
是方法名称的一部分!没有冒号,则是完全不同的方法。
这是设置重复计时器的方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(timer:) userInfo:nil repeats:YES];
return YES;
}
- (void)timer:(NSTimer *)timer
{
NSLog(@"%@", [NSDate date]);
}
另外,如果要在属性中存储计时器,请不要这样做:
@property (nonatomic, retain, strong) NSTimer *messageRefreshTimer;
只是这样做:
@property NSTimer *messageRefreshTimer;
关于ios - AppDelegate中的NSTimer从不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438599/