2016-01-21 9 views
8

Ho pensato che oggi Vedi ogni volta che lo apro chiama "viewWillAppear" ma non è così. Quando cambio qualcosa nella mia app, e poi faccio scorrere verso il basso per Today View, a volte aggiorna la vista e talvolta no.Aggiorna il widget di oggi ogni volta aperto

Faccio tutta la logica in viewWillAppear (recupera i dati da coreData e li metto nelle etichette), ma non è chiamato ogni volta.

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

come chiamare fetchContent e setLabels ogni volta che l'utente apre le estensioni di oggi?

+0

@BabyAzerty Today Extension è un widget che mostra alla vista Oggi nel Centro di notifica –

risposta

10

Per questo motivo si dovrebbe usare NSWidgetProvinding 's widgetPerformUpdateWithCompletionHandler.

Passi:

1.- Assicurati che il tuo UIViewController implementa NCWidgetProviding

class MainViewController: UIViewController, NCWidgetProviding 

2.- Aggiungere la seguente funzione:

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.- Nel tuo caso si vuole usare .NewData.

Basta assicurarsi di recuperare i dati necessari e aggiornare le proprie viste (mettendo tutti i dati in posizione, riempiendo etichette, grafici, ecc.).

Non importa che la tua vista non sia visibile durante la chiamata a questa funzione, iOS riempie la vista e ne scatta un'istantanea.

Quindi questo è quello che viene visualizzato mentre si sta aprendo il centro notifiche e fino a quando non si ottiene il controllo della propria app.

Quindi, nel tuo caso sarebbe qualcosa di simile:

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

     completionHandler(NCUpdateResult.NewData) 
    } 
+0

grazie per la risposta. funziona bene sul simulatore, ma non sul dispositivo reale. qualche idea perché? –

+1

ok vedo che se rimuovo l'estensione dal centro di notifica di oggi e lo aggiungo di nuovo funziona bene. probabilmente qualche bug appare. –

+0

come decidere se è necessario chiamare .newData o .noData? Ho tre etichette da riempire dai dati principali. Se nulla è riempito come faccio a confrontare le informazioni recuperate con visualizzate ancora? –

1

Swift 2.1 & & Xcode 7.2 Sembra una bug appare quando si ricompila molte volte questa estensione di oggi. la soluzione è quella di rimuovere dal centro di notifica e aggiungerlo di nuovo. quindi aggiorna bene ogni volta aperto

+0

è solo mentre il processo di sviluppo ... lo stesso è per il titolo del widget ... deve rimuovere e aggiungere di nuovo. Quindi funziona bene ... –

Problemi correlati