每天上午 10 点调用一种方法

Posted

技术标签:

【中文标题】每天上午 10 点调用一种方法【英文标题】:call one method every day at 10.00 AM 【发布时间】:2015-09-03 11:04:05 【问题描述】:

大家好, 我想每天早上 10 点更新我的本地数据库。应用程序正在运行或被杀死或在后台并不重要。 ios中是否有任何机制,例如android中的服务类或任何东西?

我知道我们可以通过使用本地通知来实现这一点,但是有没有办法在不使用本地通知的情况下做到这一点?

【问题讨论】:

首先,如果我们的应用程序没有运行,我们将无法进行更新,您如何使用 localNotification 来实现这一点,因为在您单击通知并打开应用程序之前无法完成更新过程。 @baydi 请先仔细阅读上述问题....我非常清楚本地通知是如何工作的...***.com/questions/16653991/… ...参考此链接.... 【参考方案1】:

您似乎需要Silent Push Notification,但在这种情况下,时间表应该在您的服务器上。

【讨论】:

【参考方案2】:

你无法做到这一点..

因为即使应用程序处于后台,Apple 也不允许连续运行任何方法...

唯一的解决方案是使用本地通知。

我知道您不适合使用本地通知,但我保留了可能有用的代码...

ViewController.m

UIApplication* app = [UIApplication sharedApplication];
    NSArray*    oldNotifications = [app scheduledLocalNotifications];

    if ([oldNotifications count] > 0)
        [app cancelAllLocalNotifications];

    NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                          fromDate:[NSDate date]];

    [components setHour: 10];
    [components setMinute: 00];
    [components setSecond: 0];
     NSDate *alertTime = [myCalendar dateFromComponents:components];

    NSLog(@"@@@@@@@@@@@@Local Notification Set Time is:%@",alertTime);

    UILocalNotification  *notifyAlarm = [[UILocalNotification alloc]
                   init];
    if (notifyAlarm)
    
        notifyAlarm.fireDate = alertTime;
        notifyAlarm.userInfo=[[NSDictionary alloc]initWithObjectsAndKeys:@“ViewController”,@“Home”, nil];
        //notifyAlarm.applicationIconBadgeNumber=1;
        notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
        notifyAlarm.repeatInterval = NSHourCalendarUnit;
        notifyAlarm.soundName = @"iPhone_Tritone.mp3";
        notifyAlarm.alertBody = @“Calling Method”;
        [app scheduleLocalNotification:notifyAlarm];
    

AppDelegate.m

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

    NSLog(@"@@@@@@@@@@Did Receive Local Notification@@@@@@@@@@@ is:%@",notification.userInfo);

    [self callingUrMethod];

否则,您可以使用服务器每天上午 10 点根据 iPhone 设备时间触发推送通知来实现它...

【讨论】:

以上是关于每天上午 10 点调用一种方法的主要内容,如果未能解决你的问题,请参考以下文章

时间又到了上午 10 点

Crontab定时任务表达式

在特定时间调用方法或操作

如何在swift 3中每天在特定时间触发本地通知

每天每分钟开始时的 API 请求 [重复]

Jenkins定时构建时间设置