2015-08-31 2 views
6

Сегодня виджет рисуется правильно, когда он добавлен в представление сегодня. Но если вы вернетесь к нему позже, функция viewDidLoad не будет вызываться и отображает устаревшие данные. Должен ли viewDidLoad вызываться каждый раз? Есть ли ошибка iOS 9/Xcode 7 beta 6?iOS 9 Сегодня Виджет не вызывает viewDidLoad

Редактировать: Добавлено, что widgetPerformUpdateWithCompletionHandler не называется. У меня есть точки останова и функции печати

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 
    print("in widgetPerformUpdateWithCompletionHandler") 
    fetch() 

    completionHandler(NCUpdateResult.NewData) 
} 
+0

Я никогда не работал с виджетами, но обычно вызывается «viewDidAppear' каждый раз, когда отображается экран времени,« viewDidLoad »вызывается только при первоначальной загрузке представления. –

+0

Вы не используете 'widgetPerformUpdateWithCompletionHandler:' см. [Здесь] (https://developer.apple.com/library/ios/documentation/NotificationCenter/Reference/NCWidgetProviding_Protocol/index.html#//apple_ref/occ/intfm/NCWidgetProviding/ widgetPerformUpdateWithCompletionHandler :) – soulshined

+3

У меня такая же проблема. 'widgetPerformUpdateWithCompletionHandler' использовался для вызова каждый раз, когда виджет отображался. iOS9 называет эти методы намного меньше. Но я не нашел никакой документации об этом изменении. –

ответ

0

проводки мой собственный ответ, но хотел бы обсуждение этого кода - она ​​должна быть там, или как правильно это сделать ?. Мы были в этом методе, и, удалив его виджет начал работать правильно

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 
{ 

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 

    if let safeCoordinator = coordinator as UIViewControllerTransitionCoordinator? 
    { 
     print("coordinator != nil") 
     safeCoordinator.animateAlongsideTransition({ context in 
      self.tableView.frame = CGRectMake(0, 0, size.width, size.height) 
      }, completion: nil) 

    } 
    else 
    { 
     print("coordinator == nil") 
    } 
} 
+0

Этот код выглядит так, будто вы пытаетесь изменить размер табличного представления в ответ на что-то другое, изменяющее высоту вашего представления. Что это такое? Если вы используете автоматический макет, ваше представление таблицы должно быть изменено в соответствии с количеством отображаемых ячеек. В противном случае вы можете установить [preferredContentSize] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/preferredContentSize), чтобы точно указать высоту, которую вы хотите , –

+0

@ChristopherPickslay Не Apple не поощряет использование preferredContentSize? – Supertecnoboff

+1

@Supertecnoboff не то, что я знаю: 'Если вы не используете Auto Layout, вы можете использовать свойство UIViewController preferredContentSize для запроса высоты для виджета.' Https://developer.apple.com/library/ios /documentation/General/Conceptual/ExtensibilityPG/Today.html#//apple_ref/doc/uid/TP40014214-CH11-SW5 –

5

При прокручивании виджет и назад на экране, тот же экземпляр контроллера будет повторно в течение короткого промежутка времени (по-видимому, до 30 секунд в моем тестировании), и viewDidLoad и widgetPerformUpdateWithCompletionHandler: не будут называться.

Однако viewWillAppear и viewDidAppear будут вызываться каждый раз, когда отображается ваш виджет.

+0

Это исправило проблему для меня, а также – Rand

+0

Спасибо, да, я переключился на viewDidAppear, и теперь все работает, спасибо:) – Supertecnoboff

 Смежные вопросы

  • Нет связанных вопросов^_^