我正在创建一个函数,该函数将在每5分钟后调用一次,直到项目从后台删除。
我已经实现了NSTimer,但它产生了像崩溃这样的问题,并且很难管理。
有没有办法在不使用计时器的情况下每隔5分钟重复调用一个函数?
我发现的一种方法是使用警报服务,但我不知道如何实现。
编辑:示例一
如果([NSUserDefaults standardUserDefaults boolForKey:@"IsUpdateConfigON"] == TRUE){
//NSLog(@"***************** One Timer to call UpdateConfig");
NSString *updatedDate = [[NSUserDefaults standardUserDefaults] valueForKey:@"IsUpdateConfigLastUpdateTime"];
int time = [Global getTimeDiff:updatedDate];
//NSLog(@"********************************** Timer value UPDATE CONGIF %d",time);
if(time >= 10){
//NSLog(@"****************** When time : %d >= %d :Config_Interval seconds ",time,Config_Interval);
cls_ConfigurationJSON *objConfig = [[cls_ConfigurationJSON alloc]init];
[objConfig loadView];
[objConfig release];
}
}其中时间是时间的倒计时,1、2、3等。此函数每隔5分钟调用一次。
因此,如果任何人有任何建议或代码,请帮助我。
发布于 2011-09-15 18:28:53
NSTimer是频繁调用方法的首选方式。发生崩溃的原因可能是与对象释放或计时器失效等相关的问题。
发布于 2011-09-15 18:29:22
当你想在某段时间后调用某个函数时,NSTimer确实是一个很好的选择。如果您可以发布您的代码,我们将尝试解决您的崩溃问题。
线程化中的另一种可能的选择是进行无限循环并放置wait语句。
你可以从这里调用无限循环的函数。
[NSThread detachNewThreadSelector:<#(SEL)selector#> toTarget:<#(id)target#> withObject:<#(id)argument#>]
在执行完操作后,你可以用这个让它休眠5分钟。
[NSThread sleepForTimeInterval:<#(NSTimeInterval)ti#>]
最后,确保一旦应用程序进入后台,任何进程的运行时间都不能超过10分钟。因此,我将无法运行一些进程,直到它被从后台删除。
发布于 2011-09-15 18:34:16
nstimer是最好的选择,因为它在单独的线程中运行...这就是我在代码中使用的代码,并且不会导致任何问题。
{
[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(checkNetworkStatus:)
userInfo:nil
repeats:YES];
return YES;
}
- (void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
internetConnectivity=@"NO";
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI.");
internetConnectivity=@"YES";
SyncRecords *obj=[[SyncRecords alloc]init];
[obj syncData];
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN.");
internetConnectivity=@"YES";
SyncRecords *obj=[[SyncRecords alloc]init];
[obj syncData];
break;
}
}
}https://stackoverflow.com/questions/7429339
复制相似问题