Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSTimer未在后台方法中调用_Ios_Objective C_Ios7_Nstimer - Fatal编程技术网

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没有在后台方法中调用。我不知道为什么会有人投票支持这个答案。