вызывать один метод каждый день в 10.00

Привет всем, я хочу обновлять свою локальную базу данных каждое утро в 10:00. не имеет значения, запущено ли приложение, убито или находится в фоновом режиме. Есть ли в IOS какой-либо механизм, например класс обслуживания в Android или что-то в этом роде?

Я знаю, что мы можем добиться этого с помощью локальных уведомлений, но есть ли способ сделать это без использования локальных уведомлений?


person Bandish Dave    schedule 03.09.2015    source источник
comment
Прежде всего, мы не можем выполнить обновление, если наше приложение не запущено, и как вы можете добиться этого с помощью localNotification, потому что процесс обновления не может быть выполнен, пока вы не нажмете уведомление и не откроется приложение.   -  person baydi    schedule 03.09.2015
comment
@baydi, пожалуйста, сначала внимательно прочитайте вопрос выше .... и я очень хорошо знаю, как работает локальное уведомление ... stackoverflow.com/questions/16653991/... перейдите по этой ссылке....   -  person Bandish Dave    schedule 03.09.2015


Ответы (2)


Кажется, вам нужно тихое push-уведомление, но в этом случае расписание должно быть на вашем сервере.

person AlexZd    schedule 03.09.2015

Вы не можете этого добиться..

Поскольку 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];
}

В противном случае вы достигнете этого, используя Push-уведомления, которые будут запускаться сервером каждый день в 10:00 в зависимости от времени устройства iPhone...

person Vidhyanand    schedule 03.09.2015