2015-08-31 14 views
6

Die heute widget korrekt gezeichnet wird, wenn es in die heute Ansicht hinzugefügt wird. Wenn der Benutzer jedoch später darauf zurückkommt, wird die Funktion viewDidLoad nicht aufgerufen und zeigt veraltete Daten an. Soll viewDidLoad immer aufgerufen werden? Gibt es einen iOS 9/Xcode 7 Beta 6 Bug?iOS 9 Heute Widget Aufruf nicht viewDidLoad

Bearbeiten: Hinzugefügt, dass widgetPerformUpdateWithCompletionHandler nicht entweder aufgerufen. Ich habe Haltepunkte setzen und Druckfunktionen

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

    completionHandler(NCUpdateResult.NewData) 
} 
+0

Ich habe noch nie mit Widgets gearbeitet, aber normalerweise 'viewDidAppear' wird jedes Mal Bildschirm präsentiert wird,' viewDidLoad' wird nur aufgerufen, wenn Ansicht anfänglich geladen genannt. –

+0

Verwenden Sie nicht 'widgetPerformUpdateWithCompletionHandler:' siehe [hier] (https://developer.apple.com/library/ios/documentation/NotificationCenter/Reference/NCWidgetProviding_Protocol/index.html#//apple_ref/occ/intfm/NCWidgetProviding/ widgetPerformUpdateWithCompletionHandler :) – soulshined

+3

Ich habe das gleiche Problem. 'widgetPerformUpdateWithCompletionHandler' wurde jedes Mal aufgerufen, wenn das Widget angezeigt wurde. iOS9 nennt diese Methoden weit weniger. Aber ich habe keine Dokumentation über diese Änderung gefunden. –

Antwort

0

meine eigene Antwort Posting, aber würde Diskussion zu diesem Code möchte - sollte es da sein, oder, wie man richtig tun ?. Wir hatten in diesem Verfahren und durch das Widget zu entfernen begann

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

Dieser Code sieht so aus, als ob Sie versuchen, die Größe der Tabellenansicht zu ändern, um die Höhe Ihrer Ansicht zu ändern. Was ist das noch etwas anderes? Wenn Sie das automatische Layout verwenden, sollte die Größe der Tabellenansicht an die Anzahl der angezeigten Zellen angepasst werden. Ansonsten können Sie [preferredContentSize] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/preferredContentSize) angeben, genau die gewünschte Höhe . –

+0

@ChristopherPickslay Apple rät von der Verwendung von preferredContentSize nicht ab? – Supertecnoboff

+1

@Supertecnoboff nicht, dass ich bin mir dessen bewusst: 'Wenn Sie nicht Auto-Layout verwenden, können Sie die UIViewController Eigenschaft preferredContentSize verwenden, um eine Höhe für die widget.' https://developer.apple.com/library/ios anfordern /documentation/General/Conceptual/ExtensibilityPG/Today.html#//apple_ref/doc/uid/TP40014214-CH11-SW5 –

5

korrekt funktioniert Wenn Sie ein Widget aus und wieder auf dem Bildschirm bewegen, wird die gleiche Controller-Instanz für eine kurze Zeit wiederverwendet werden (erscheint ~ 30 Sekunden in meinem Test), und viewDidLoad und widgetPerformUpdateWithCompletionHandler: werden nicht aufgerufen.

Jedoch werden viewWillAppear und viewDidAppear jedes Mal aufgerufen, wenn Ihr Widget angezeigt wird.

+0

Dieses Fest für mich die Frage, wie gut – Rand

+0

dank ja, ich wechselte zu viewDidAppear und jetzt alles funktioniert dank:) – Supertecnoboff