непрерывный вызов метода даже в фоновом режиме ios

Есть ли способ вызывать метод непрерывно, пока приложение работает в фоновом режиме или на переднем плане. Этот метод используется для проверки времени и запуска уведомления в соответствии с изменением времени.

вот метод

-(void)checkDate
{ 
   NSDate *today = [NSDate date];
   NSString *endTime =@"24:00";
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setDateFormat:@"HH:mm"];
   NSString *currentTime = [dateFormatter stringFromDate:today];
   NSLog(@"############ Current time is  %@",currentTime);
   if ([currentTime isEqualToString: endTime]) {
      NSLog(@"notifiction Fired");
      [[NSNotificationCenter defaultCenter]postNotificationName:@"todayEnds" object:self];
   }
}

Мое требование - опубликовать NSNotification из метода независимо от состояния приложений.


person vishnuvarthan    schedule 13.10.2014    source источник
comment
Настройте NSTimer для срабатывания в целевое время; не опрашивайте так настенные часы.   -  person Droppy    schedule 13.10.2014
comment
NSTimer не будет работать в фоновом режиме @Droppy. см. мой метод в редактировании   -  person vishnuvarthan    schedule 13.10.2014
comment
напишите код в приложении, войдет в фон...   -  person Arun    schedule 13.10.2014
comment
этот метод должен вызываться постоянно, потому что он используется для записи журналов устройств.   -  person vishnuvarthan    schedule 13.10.2014
comment
@Droppy, что делать, если приложение находится в фоновом режиме в это определенное время   -  person vishnuvarthan    schedule 13.10.2014
comment
@Droppy NSTimer можно использовать, если ваше приложение находится на переднем плане, фоновое выполнение может быть выполнено для обновления местоположения voip и т. д.,   -  person vishnuvarthan    schedule 13.10.2014
comment
Где ?? что ??. Будьте немного ясны   -  person vishnuvarthan    schedule 13.10.2014
comment
Обратите внимание, что это не имеет ничего общего с xcode IDE, поэтому я удалил тег xcode.   -  person Popeye    schedule 13.10.2014
comment
Какие журналы устройств вы хотите писать в фоновом режиме, кроме как заснул и проснулся? То, что вы хотите сделать, разряжает батарею пользователя и отклоняет ваше приложение из магазина приложений.   -  person gnasher729    schedule 13.10.2014
comment
есть voip-звонки, фоновая загрузка и все такое @gnasher729. И мое приложение уже год в магазине приложений   -  person vishnuvarthan    schedule 13.10.2014


Ответы (2)


Как указано в комментариях, NSTimer будет работать только в том случае, если ваше приложение в данный момент находится на переднем плане. Выполнение кода для приложений, работающих в фоновом режиме, на iOS довольно сложно.

Есть несколько возможностей для достижения этого, которые, я сомневаюсь, подойдут для вашей цели, например:

  • Обновление основного местоположения: если вы используете Core Location в своем приложении, ваше приложение может получать обновления об изменении местоположения устройства по GPS и получает возможность выполнять некоторые операции в фоновом режиме на основе нового GPS. данные
  • Передача голоса по IP. Приложение предоставляет услуги передачи голоса по IP. Приложения с этим ключом автоматически запускаются после загрузки системы, чтобы приложение могло восстановить службы VoIP. Приложениям с этим ключом также разрешено воспроизводить фоновый звук. (из Apple Docs)
  • Загрузка в фоновом режиме. С помощью загрузки в фоновом режиме вы можете выполнять сетевые запросы на регулярной основе, однако вы по-прежнему не можете выполнять операции в моменты времени, которые вы можете точно указать, вы можете скорее сказать iOS, что вы хочу выполнять сетевые запросы через равные промежутки времени, и iOS будет планировать выполнение запросов за вас. Вот отличное чтение фоновой выборки.

Для получения дополнительной информации см. Документы Apple по фоновому выполнению< /а>!

В вашем случае я бы порекомендовал вам взглянуть на UILocalNotification. Мне не на 100% ясно, чего именно вы пытаетесь достичь, но UILocalNotification может быть для вас подходящим способом, поскольку похоже, что вы хотите уведомить пользователя в разное время... UILocalNotification работает так, как вы можно запланировать уведомление, пока приложение находится на переднем плане (или в фоновом режиме, если вы используете эти фоновые режимы выполнения), которое уведомит пользователя в определенный момент времени.

Надеюсь, поможет!

person nburk    schedule 13.10.2014
comment
я не хочу ничего уведомлять пользователя, я просто хочу опубликовать уведомление, когда день закончится, и это уведомление будет иметь свой метод выбора для выполнения некоторых действий. Так что мне не нужно UILocalNotification. - person vishnuvarthan; 13.10.2014
comment
Мое требование простое. Опубликуйте NSNotification из метода независимо от состояния приложений. - person vishnuvarthan; 13.10.2014
comment
Как я уже сказал, вам следует ознакомиться с документацией по фоновому выполнению... но если вам нужно выполнять фоновые операции в определенный момент времени, я уже могу вам сказать, что это не сработает. Вам придется найти способ достичь своей цели, учитывая ограниченные возможности фонового выполнения, которые предоставляет вам Apple. - person nburk; 13.10.2014

Мое требование простое. Опубликуйте NSNotification из метода независимо от состояния приложений.

Это невозможно в iOS. Как описано nburk, есть несколько исключений из общего правила, согласно которому приложения не могут работать в фоновом режиме. Вы должны использовать одно из этих исключений или найти другой способ добиться того, чего вы хотите.

Кстати: ваш код для определения момента времени выглядит подозрительно, если не сказать больше. Возможно, вам следует описать, какова ваша цель на самом деле, чтобы мы могли помочь вам найти жизнеспособное решение.

Вот ответ, в котором описывается, как обнаруживать изменения дня (отправлять уведомление в полночь). Он включает рабочий проект Xcode.

person Nikolai Ruhe    schedule 13.10.2014
comment
Как указывали другие, NSTimer - это способ выполнить код в заданное время. Ваша обеспокоенность тем, что он не работает в фоновом режиме, недействительна, поскольку это верно для любого другого кода, включая ваш опрос. - person Nikolai Ruhe; 13.10.2014