2015-09-28 10 views
5

A partire da watchOS 2, abbiamo un oggetto ExtensionDelegate, che è analogo a UIApplicationDelegate (reagisce agli eventi del ciclo di vita delle app).watchOS 2: impostazione delle proprietà sul controller di interfaccia iniziale

Desidero ottenere un riferimento al primo oggetto Controller di interfaccia, che verrà visualizzato all'avvio, per impostare una proprietà su di esso (ad esempio, passare in un oggetto di archivio dati).

Secondo il docs, la proprietà rootInterfaceController su WKExtension mani indietro il regolatore iniziale:

Il controller di interfaccia principale si trova nella storyboard principale dell'app e ha lo scopo principale punto di ingresso ad esso associati. WatchKit visualizza il controller dell'interfaccia root al momento dell'avvio, sebbene l'app possa presentare un controller di interfaccia diverso prima che la sequenza di avvio termini.

quindi cerco quanto segue in ExtensionDelegate:

func applicationDidFinishLaunching() { 
    guard let initialController = WKExtension.sharedExtension().rootInterfaceController else { 
     return 
    } 

    initialController.dataStore = DataStore() 
} 

Anche se viene visualizzata l'interfaccia controller corretto, rootInterfaceController è pari a zero, a questo punto. È interessante notare che se interrogo la stessa proprietà nel willActivate() del mio controller di interfaccia, la proprietà è impostata correttamente.

In un'app per iOS, è già possibile ottenere il controller di visualizzazione radice in applicationDidFinishLaunching() e ho pensato che dovrebbe funzionare lo stesso per watchOS.

C'è un modo per impostare le proprietà sul mio controller di interfaccia prima che venga visualizzato (dall'esterno)? è un insetto?

Mille grazie per la risposta!

+0

Avete mai trovato la causa di questo? @ józsef-vesza – Wilmar

+0

@Wilmar purtroppo no. Sembra che 'rootInterfaceController' sia nullo in questa fase, quindi ho finito con l'istanziare le mie proprietà nelle sottoclassi del mio controller di interfaccia. Non eccezionale, ma è il meglio che ho ottenuto finora. :/ –

+0

Mm Capisco. Ho aggiunto un 'dispatch_after' nel mio codice, impostato su 1 secondo, e quindi la proprietà' rootInterfaceController' aveva il valore previsto. Abbastanza frustrante. @ józsef-vesza – Wilmar

risposta

-1

È possibile spostare il codice su applicationDidBecomeActive.

Questa pagina descrive gli stati delle app di visualizzazione. Quando viene richiamato applicationDidFinishLaunching, l'app si trova in uno stato inattivo.

https://developer.apple.com/library/watchos/documentation/WatchKit/Reference/WKExtensionDelegate_protocol/index.html

+2

Purtroppo, ho già provato questo, ma 'WKExtension.sharedExtension(). RootInterfaceController' è' nil' in tutte le chiamate di delegato di estensione. –

Problemi correlati