每天在特定时间调用方法
Posted
技术标签:
【中文标题】每天在特定时间调用方法【英文标题】:Calling A Method At Specific Time Every Day 【发布时间】:2013-05-15 06:36:02 【问题描述】:我的应用程序一直在自助服务终端模式下运行。在特定时间每 24 小时一次,我需要将一些数据从核心数据同步到 Web 服务。
我知道如何进行同步,但我不知道如何安排应用程序在每天的特定时间进行同步调用,例如凌晨 02:45。
当应用不断运行时,是否可以这样做?
【问题讨论】:
当然有可能。 :) 我不能具体说明如何,但它必须类似于警报逻辑,在特定时间触发一些动作。 @motionpotion 看看这个链接可能你想要这个redth.codes/ios7-recipe-background-fetching @motionpotion : 如果你得到了解决方案,请与我分享...我在过去很多天都在尝试相同的任务...帮助我 【参考方案1】:使用本地通知。这里有教程:http://www.icodeblog.com/2010/07/29/iphone-programming-tutorial-local-notifications/
希望这可以帮助你开始......
这也是:
Local Notifications
Background Tasks
【讨论】:
有没有办法在不使用本地通知的情况下做到这一点? 如果用户没有授予权限怎么办?【参考方案2】:感谢@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];
这为今天凌晨 02: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
【讨论】:
如果这样做,用户会看到一条空白消息吗?【参考方案3】:一个简单的解决方案就是将NSTimer
设置为每分钟(例如每秒)检查当前日期。如果当前日期大于所需日期,则触发该方法并更新所需日期。
【讨论】:
以上是关于每天在特定时间调用方法的主要内容,如果未能解决你的问题,请参考以下文章