我的应用程序在信息亭模式下不断运行。在特定时间每 24 小时一次,我需要将一些数据从核心数据同步到 Web 服务。
我知道如何进行同步,但我不知道如何安排应用程序在每天的特定时间(例如凌晨 02:45)进行同步调用。
当应用程序不断运行时,是否可以做这样的事情?
使用本地通知。这是一个教程: http: //www.icodeblog.com/2010/07/29/iphone-programming-tutorial-local-notifications/
希望这可以帮助你开始......
这也是:
多亏了@lakesh 的提示,才知道这一点。在这种情况下发布解决方案对某人有所帮助,因为我发现 NSNotification 示例一开始很难理解。
在我的主视图控制器中,我添加了以下方法:
- (void)scheduleNotification
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *notif = [[UILocalNotification alloc] init];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
[components setDay: day];
[components setMonth: month];
[components setYear: year];
[components setHour: 02];
[components setMinute: 45];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone systemTimeZone]];
NSDate *dateToFire = [calendar dateFromComponents:components];
notif.fireDate = dateToFire;
notif.timeZone = [NSTimeZone systemTimeZone];
notif.repeatInterval = NSDayCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:notif];
}
这为今天凌晨 2:45 的通知设置了触发日期,并且每天重复。
在我的视图控制器的 viewDidLoad 中,我调用了上述方法:
[self scheduleNotification];
在 appdelegate 中,我执行以下操作:
- (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification
{
application.applicationIconBadgeNumber = 0;
//call your method that you want to do something in your app
}
一个简单的解决方案是设置NSTimer
为每分钟(例如每秒)检查当前日期。如果当前日期大于所需日期,则触发该方法并更新所需日期。