-3

有没有办法只要app在后台或者前台运行就可以连续调用一个方法。这个方法用来检查时间,根据时间的变化触发通知。

这是方法

-(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,而不管应用程序状态如何

4

2 回答 2

2

正如评论中所指出的,NSTimer仅当您的应用程序当前处于前台时才有效。在 iOS 上,后台应用程序的代码执行非常棘手。

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

  • 核心位置更新:如果您在您的应用程序中使用Core Location,您的应用程序可以在设备的 GPS 位置发生变化时接收更新,并有机会根据新的 GPS 数据在后台执行一些操作
  • IP 语音该应用程序提供 IP 语音服务。系统启动后会自动启动具有此密钥的应用程序,以便该应用程序可以重新建立 VoIP 服务。具有此键的应用程序也可以播放背景音频。(来自苹果文档)
  • 后台抓取:通过后台抓取,您可以定期执行网络请求,但是您仍然无法在您可以精确指定的时间点执行操作,您可以告诉 iOS 您定期执行网络请求间隔和 iOS 将为您安排请求。这是关于后台提取的优秀读物

有关更多信息,请查看有关后台执行的 Apple 文档

对于您的情况,我建议您查看UILocalNotification. 我不是 100% 清楚你到底想达到什么目标,但UILocalNotification可能是你要走的路,因为听起来你想根据不同的时间通知用户......UILocalNotification以你可以安排的方式工作应用程序处于前台(或后台,如果您使用这些后台执行模式)时的通知,它将在特定时间点通知用户。

希望能帮助到你!

于 2014-10-13T07:09:57.153 回答
0

我的要求很简单。无论应用程序状态如何,都从方法发布 NSNotification。

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

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

这是一个描述如何检测日期变化的答案(在午夜发出通知)。它包括一个有效的 Xcode 项目。

于 2014-10-13T07:27:06.453 回答