只要应用程序在后台或前台运行,是否有办法连续调用方法。此方法用于检查时间并根据时间的变化触发通知。
这是方法
-(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,而不管应用状态
答案 0 :(得分:2)
正如评论中所指出的,NSTimer
仅在您的应用目前位于前台时才有效。在iOS中,后台应用程序的代码执行非常棘手。
实现这一目标有几种可能性,我怀疑这些可能适合您的目的,例如:
Core Location
,您的应用可以在设备的GPS位置发生变化时获得更新,并有机会执行某些操作基于新GPS数据的背景有关详细信息,请查看Apple Docs on background execution!
对于您的情况,我建议您查看UILocalNotification
。它并非100%清楚我到底想要达到的目的,但UILocalNotification
可能是你的方式,因为它听起来像你想根据不同的时间通知用户。 。UILocalNotification
的工作方式是,当应用程序位于前台时(如果您使用这些后台执行模式,则可以安排通知),这将在特定时间点通知用户。
希望它有所帮助!
答案 1 :(得分:0)
我的要求很简单。无论应用程序状态如何,都从方法中提取NSNotification。
这在iOS中是不可能的。正如nburk所描述的那样,应用程序无法在后台运行的一般规则几乎没有例外。您必须使用其中一个例外或找到一种不同的方式来实现您想要的目标。
顺便说一句:您检测某个时间点的代码看起来很可疑。也许您应该描述您的目标是什么,以便我们可以帮助您找到可行的解决方案。
Here's an answer描述了如何检测日期变化(在午夜发出通知)。它包括一个有效的Xcode项目。