3

我的应用程序在信息亭模式下不断运行。在特定时间每 24 小时一次,我需要将一些数据从核心数据同步到 Web 服务。

我知道如何进行同步,但我不知道如何安排应用程序在每天的特定时间(例如凌晨 02:45)进行同步调用。

当应用程序不断运行时,是否可以做这样的事情?

4

3 回答 3

4

使用本地通知。这是一个教程: http: //www.icodeblog.com/2010/07/29/iphone-programming-tutorial-local-notifications/

希望这可以帮助你开始......

这也是:

本地通知

后台任务

于 2013-05-20T17:04:19.303 回答
3

多亏了@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
} 
于 2013-06-14T00:12:14.730 回答
-2

一个简单的解决方案是设置NSTimer为每分钟(例如每秒)检查当前日期。如果当前日期大于所需日期,则触发该方法并更新所需日期。

于 2017-03-09T22:40:19.733 回答