2016-01-21 5 views
8

Я думал, что сегодня View каждый раз, когда я его открываю, он вызывает «viewWillAppear», но его нет. Когда я что-то меняю в своем приложении, а затем сползаю вниз, для Today View иногда обновляется представление, а иногда нет.Обновить сегодня Виджет каждый раз открыт

Я делаю все логически в представленииWillAppear (извлекает данные из coreData и помещает эти данные в метки), но его не вызывается каждый раз.

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    fetchContent() 
    setLabels() 
    setContentHeight() 
    tableView.reloadData() 
    print("view will appear") 
} 

Как позвонить fetchContent и setLabels при каждом открытии пользователем Сегодня расширения?

+0

@BabyAzerty Today Extension - это виджет, который отображается на сегодня в Центре уведомлений –

ответ

10

Для этого вы должны использовать NSWidgetProvinding's widgetPerformUpdateWithCompletionHandler.

Шаги:

1.- Убедитесь, что ваш UIViewController реализует NCWidgetProviding

class MainViewController: UIViewController, NCWidgetProviding 

2.- Добавьте следующую функцию:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 
     // Perform any setup necessary in order to update the view. 

     // If an error is encountered, use NCUpdateResult.Failed 
     // If there's no update required, use NCUpdateResult.NoData 
     // If there's an update, use NCUpdateResult.NewData 

     completionHandler(NCUpdateResult.NewData) 
    } 

3.- В вашем случае вы используйте .NewData.

Просто убедитесь, что вы извлекаете необходимые данные и обновляете свои представления (, помещая все данные на место, заполняя этикетки, графики и т. Д.).

Не обращайте внимания на то, что ваше мнение не отображается во время вызова этой функции, iOS заполнит представление и сделает снимок.

Тогда это то, что он показывает, пока вы открываете центр уведомлений и пока не получите контроль над своим приложением.

Таким образом, в вашем случае будет что-то вроде этого:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 
     fetchContent() 
     setLabels() 
     setContentHeight() 
     tableView.reloadData() 

     completionHandler(NCUpdateResult.NewData) 
    } 
+0

спасибо за ответ. он отлично работает на симуляторе, но не на реальном устройстве. любые идеи почему? –

+1

ok Я вижу, что если я удаляю сегодня расширение из центра уведомления о просмотре и добавляю его снова, он работает хорошо. вероятно, появляется какая-то ошибка. –

+0

как решить, нужно ли звонить .newData или .noData? У меня есть три ярлыка для заполнения из основных данных. Если ничего не заполнено, как мне сравнить отображаемую информацию с показом? –

1

Swift 2,1 & & Xcode 7,2 Похоже, какая-то ошибка появляется, когда вы много раз перекомпилировать это расширение сегодня. решение - удалить из центра уведомлений и добавить его снова. то он обновляется каждый раз открыто

+0

это только в процессе разработки ... то же самое для названия виджета ... необходимо удалить и добавить снова. Потом работает отлично ... –

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