相关疑难解决方法(0)

应用程序在后台时预定的NSTimer?

当应用程序在后台时,人们如何处理预定的NSTimer?

假设我每小时在我的应用中更新一些内容.

updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0*60.0 
target:self 
selector:@selector(updateStuff) 
userInfo:nil 
repeats:YES];
Run Code Online (Sandbox Code Playgroud)

在后台时,此计时器显然不会触发(?).当用户回到应用程序时应该怎么办?计时器是否仍然在运行,同一时间?

如果用户在一小时内回来,会发生什么.它会在错过的所有时间触发,还是等到下一次更新时间?

我想要它做的是在应用程序进入前台后立即更新,如果它应该触发的日期是过去的.那可能吗?

iphone nstimer uiapplicationdelegate ios

54
推荐指数
5
解决办法
7万
查看次数

用GCD运行重复NSTimer?

我想知道为什么当你在GCD块中创建一个重复计时器时它不起作用?

这很好用:

-(void)viewDidLoad{
    [super viewDidLoad];
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
}
-(void)runTimer{
    NSLog(@"hi");
}
Run Code Online (Sandbox Code Playgroud)

但这项工作:

dispatch_queue_t myQueue;

-(void)viewDidLoad{
    [super viewDidLoad];

    myQueue = dispatch_queue_create("someDescription", NULL);
    dispatch_async(myQueue, ^{
        [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
    });
}
-(void)runTimer{
    NSLog(@"hi");
}
Run Code Online (Sandbox Code Playgroud)

objective-c nstimer grand-central-dispatch nsrunloop ios

19
推荐指数
1
解决办法
1万
查看次数

全局队列中的计时器未在iOS中调用

-(void)viewDidLoad{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [NSTimer scheduledTimerWithTimeInterval:0.10 
                                         target:self 
                                       selector:@selector(action_Timer) 
                                       userInfo:nil 
                                        repeats:YES];
        }
    );
}

-(void)action_Timer{
    LOG("Timer called");
}
Run Code Online (Sandbox Code Playgroud)

action_Timer没有被召唤.我不知道为什么.你有什么主意吗?

iphone nstimer grand-central-dispatch ios

5
推荐指数
1
解决办法
3470
查看次数