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中也会连续调用方法_Ios_Objective C_Uilocalnotification_Uibackgroundtask - Fatal编程技术网

即使在后台ios中也会连续调用方法

即使在后台ios中也会连续调用方法,ios,objective-c,uilocalnotification,uibackgroundtask,Ios,Objective C,Uilocalnotification,Uibackgroundtask,是否有一种方法可以在应用程序在后台或前台运行时连续调用方法。此方法用于检查时间并根据时间变化触发通知 这里是方法 -(void)checkDate { NSDate *today = [NSDate date]; NSString *endTime =@"24:00"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"HH:mm

是否有一种方法可以在应用程序在后台或前台运行时连续调用方法。此方法用于检查时间并根据时间变化触发通知

这里是方法

-(void)checkDate
{ 
   NSDate *today = [NSDate date];
   NSString *endTime =@"24:00";
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setDateFormat:@"HH:mm"];
   NSString *currentTime = [dateFormatter stringFromDate:today];
   NSLog(@"############ Current time is  %@",currentTime);
   if ([currentTime isEqualToString: endTime]) {
      NSLog(@"notifiction Fired");
      [[NSNotificationCenter defaultCenter]postNotificationName:@"todayEnds" object:self];
   }
}

我的要求是,无论应用程序的状态如何,都要发布一个来自某个方法的NSNotification,正如注释中指出的那样,
NSTimer
仅在应用程序当前处于前台时才起作用。在iOS上,后台应用程序的代码执行相当棘手

有几种可能实现这一点,我怀疑这是否适合您的目的,例如:

  • 核心位置更新:如果您正在应用程序中使用
    核心位置
    ,则当设备的GPS位置发生变化时,您的应用程序可以接收更新,并有机会根据新的GPS数据在后台执行某些操作
  • IP语音:该应用程序提供IP语音服务。具有此密钥的应用程序将在系统启动后自动启动,以便该应用程序可以重新建立VoIP服务。使用此键的应用程序也可以播放背景音频。(摘自苹果文档)
  • 后台回迁:使用后台回迁,您可以定期执行网络请求,但是您仍然无法在您可以精确指定的时间点执行操作,您可以告诉iOS您希望定期执行网络请求,iOS将为您安排请求
有关更多信息,请查看

对于您的情况,我建议您查看
UILocalNotification
。我并不完全清楚您到底想要实现什么,但是
UILocalNotification
可能是您的选择,因为听起来您希望根据不同的时间通知用户
UILocalNotification
的工作方式是,当应用程序处于前台(或后台,如果您使用这些后台执行模式)时,您可以安排通知,该通知将在特定时间点通知用户

希望有帮助


我的要求很简单。不管应用程序的状态如何,都要发布一个来自方法的通知

这在iOS中是不可能的。正如nburk所描述的,应用程序不能在后台运行的一般规则几乎没有例外。你必须使用其中一个例外,或者找到一种不同的方法来实现你想要的

顺便说一句:至少可以说,检测时间点的代码看起来很可疑。也许你应该描述一下你的目标是什么,这样我们可以帮助你找到一个可行的解决方案


它描述了如何检测日变化(在午夜发出通知)。它包括一个工作的Xcode项目。

设置一个
NSTimer
在目标时间触发;不要这样轮询挂钟。NSTimer不会在background@dropy中工作。请参阅app中editwrite代码中的my方法将输入后台…此方法必须被称为continuously,因为它用于编写设备日志,您想在后台写入设备日志,而不是“睡”和“醒了”?你想做的事情会耗尽用户的电池,并让应用商店拒绝你的应用。我不想通知用户任何事情,我只想在一天结束时发布通知,该通知将有其选择器方法来执行某些操作。所以我不需要UILocalNotification。我的要求很简单。不管应用程序的状态如何,从一个方法发布一个NSNotification。正如我所说,你应该看看后台执行的文档,。。。但是,如果您的要求是在特定时间点执行后台操作,我可以告诉您,这是行不通的。考虑到苹果提供的有限后台执行可能性,您必须找到一种实现目标的方法。正如其他人所指出的,
NSTimer
是在给定时间执行代码的方法。您担心它不会在后台运行是无效的,因为这对于其他所有代码都是正确的,包括您的轮询。