2016-08-01 4 views
0

Я вызываю метод updateApplicationContext в AppDelegate, чтобы проверить и отправить имя пользователя Apple Watch.didReceiveApplicationContext метод в фоновом режиме WatchOS/WatchConnectivity

NSDictionary *applicationDict = @{@"status" : m.customer.first_name}; 
[[WCSession defaultSession] updateApplicationContext:applicationDict error:nil]; 

Когда приложение для наблюдения находится в фоновом режиме, приложение iOS просыпается. Метод updateApplicationContext в iOS вызывается и метод didReceiveApplicationContext вызывается в WatchOS. Тем не менее, я не могу установить текст метки, когда вызывается метод doReceiveApplicationContext, когда приложение Watch находится в фоновом режиме. Если приложение watch активно, когда вызывается didReceiveApplicationContext, текст метки изменяется.

метод делегата в watchOS:

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){ 
     let message : String = applicationContext["status"] as! String 
     messageLabel.setText(message) 
    } 

Что может быть причиной этой проблемы? Должен ли я сохранять значение, которое извлекается, когда приложение часов находится в фоновом режиме и меняет текст при вызове функцииActivate?

ответ

0

Поместите свой метод

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){ 
    let message : String = applicationContext["status"] as! String 
    messageLabel.setText(message) 
} 

в Extension делегатом поймать обновления, если приложение в фоновом режиме или в ViewController, когда активен. У меня была такая же проблема, что метод didReceiveApplicationContext вызывается как ожидалось. Но затем для его тестирования иногда требуется несколько секунд, чтобы получить данные в фоновом режиме. Поэтому я иногда запускал свое приложение и был смущен тем, что лейбл не обновлялся. Проблема заключалась в том, что данные доставляются после того, как контроллер просмотра активирован.