NSTimer 复位后不工作
NSTimer not working after reset
我有一个 NSTimer,它应该在应用程序处于前台时工作,但在应用程序进入后台时应该停止。但如果再次来到前台,计时器将无法正常工作。有什么办法吗?
inbox.m
(viewDidLoad){
myTimer = [NSTimer scheduledTimerWithTimeInterval: 0.60 target: self selector: @selector(saveSlow) userInfo: nil repeats: YES];
if([[NSUserDefaults standardUserDefaults] boolForKey:@"enterBG"]==YES)
{
[myTimer invalidate];
myTimer = nil;
}
....
}
您不能在您的项目中尝试此代码
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.60 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
-(void) timerMethod{
NSLog(@"in Vijay yadav ");
}
尝试删除:
[myTimer invalidate];
myTimer = nil;
因为计时器将在 3 分钟后在后台停止工作。当你来到前台时,它会自动运行。通过使无效和零,您将删除计时器的实例。在这种情况下,您必须再次初始化计时器。
是否在应用进入前台后重新设置了enterBG
的bool值?如果没有,即使生成了定时器,稍后也会再次失效。
还有一点,你在-viewDidLoad
中生成了你的定时器,一般来说,view life loop只调用它一次。下次您的应用程序进入前台时,它不会被调用。这可能是您的计时器不再工作的另一个原因。 您可以尝试将其改为 -viewWillAppear:
。 您需要手动调用代码片段。
还有一个建议,你最好使用相关的通知来处理定时器:
UIApplicationDidEnterBackgroundNotification
UIApplicationWillEnterForegroundNotification
我有一个 NSTimer,它应该在应用程序处于前台时工作,但在应用程序进入后台时应该停止。但如果再次来到前台,计时器将无法正常工作。有什么办法吗?
inbox.m
(viewDidLoad){
myTimer = [NSTimer scheduledTimerWithTimeInterval: 0.60 target: self selector: @selector(saveSlow) userInfo: nil repeats: YES];
if([[NSUserDefaults standardUserDefaults] boolForKey:@"enterBG"]==YES)
{
[myTimer invalidate];
myTimer = nil;
}
....
}
您不能在您的项目中尝试此代码
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.60 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
-(void) timerMethod{
NSLog(@"in Vijay yadav ");
}
尝试删除:
[myTimer invalidate];
myTimer = nil;
因为计时器将在 3 分钟后在后台停止工作。当你来到前台时,它会自动运行。通过使无效和零,您将删除计时器的实例。在这种情况下,您必须再次初始化计时器。
是否在应用进入前台后重新设置了enterBG
的bool值?如果没有,即使生成了定时器,稍后也会再次失效。
还有一点,你在-viewDidLoad
中生成了你的定时器,一般来说,view life loop只调用它一次。下次您的应用程序进入前台时,它不会被调用。这可能是您的计时器不再工作的另一个原因。 您可以尝试将其改为 您需要手动调用代码片段。-viewWillAppear:
。
还有一个建议,你最好使用相关的通知来处理定时器:
UIApplicationDidEnterBackgroundNotification
UIApplicationWillEnterForegroundNotification