Ios NSTimer未在后台方法中调用
我陷入了困境。我试图在一个方法中运行一个计时器,该方法本身在后台,导致我的计时器没有启动。我知道了一些无法在后台初始化计时器的地方,所以有什么方法可以做到这一点吗?试试这个:Ios NSTimer未在后台方法中调用,ios,objective-c,ios7,nstimer,Ios,Objective C,Ios7,Nstimer,我陷入了困境。我试图在一个方法中运行一个计时器,该方法本身在后台,导致我的计时器没有启动。我知道了一些无法在后台初始化计时器的地方,所以有什么方法可以做到这一点吗?试试这个: // provide value as required. Time here is 3 sec dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 3.0 * NSEC_PER_SEC); dispatch_after(popTime, dispatc
// provide value as required. Time here is 3 sec
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 3.0 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// do your task
});
您可以在主线程上执行该操作
[self performSelectorOnMainThread:@selector(initTimer) withObject:nil waitUntilDone:NO];
然后
- (void)initTimer {
// Init your timer here.
}
正如@Bryan Chen所指出的,您可以使用以下代码计划在当前线程上运行方法:
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC);
dispatch_after(when, dispatch_get_current_queue(), ^(void) {
[self myTimedMethod];
});
您不能在后台线程中使用NSTimer,除非您在该线程上维护运行循环。您可以在ios7中尝试后台获取以在后台运行代码。在,如果没有nsrunloopp,NSTimer将无法在Backgroud线程中工作。请详细解释我在代码中应该做什么。计时器初始化操作应该放在initTimer方法中。我不明白您的想法。您的答案是使用主线程,但OP希望通过计时器在后台线程中运行他的方法。如问题中所述,您不能在后台线程中初始化计时器。@yibuyiq您的initTimer方法将不会在后台线程中调用。OP已经尝试过这一点,这就是为什么问题标题为NSTimer没有在后台方法中调用。我不知道为什么会有人投票支持这个答案。