2015-01-05 1 views
12

Sto lavorando su un widget iOS oggi e le cose sono abbastanza funzionali. Tuttavia, se in esecuzione su un vero e proprio dispositivo iOSho avuto occasione di vedere: host connection <NSXPCConnection: 0x538ee0> connection from pid 42 invalidated "connessione host <NSXPCConnection: 0x538ee0> connessione da pid 42 invalidata" per widget iOS Today

Questo non sembra essere un grosso problema, tranne che il widget sembra per ricaricare quasi quando questo accade, a volte lasciando lo spazio nel Oggi schermo vuoto fino a quando iOS lo ridisegna e tutto viene ricaricato.

Qualcun altro ha riscontrato questo? Non sto utilizzando NSXPCConnection nella mia app, quindi suppongo che questo sia qualcosa incorporato nel framework ma non sono sicuro

+1

Questo potrebbe essere simile a http://stackoverflow.com/questions/27011952/debug-info-when-run-today-extension – ryno2019

+0

Hai trovato qualche soluzione per questo? –

+0

No. Sarò sicuro di aggiornare se lo faccio! Per ora sto soffrendo con il comportamento di widget icky. – ryno2019

risposta

9

L'API NSXPCConnection viene utilizzata per eseguire la connessione tra processi tra il client Xcode e la tua app su iPhone . Quindi non devi preoccuparti di questo.

Link: https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

Quindi ci possono essere 2 motivi che il widget è terminato.

  1. È necessario chiamare completionHandler (NCUpdateResultNoData); subito dopo il tuo widgetPerformUpdateWithCompletionHandler è stato chiamato anche quando la risposta non è stata restituita.

  2. L'app è stata interrotta a causa della chiusura automatica dell'app. Termina i widgets/applicazioni per 2 motivi:

a. Termina le app che non vengono utilizzate e che consentono il recupero delle risorse di risorse come la memoria.

b. Termina i widget che utilizzano troppa memoria.

+0

Concordato, ma il mio widget non riceve alcun avviso di memoria e sembra esserci una stretta relazione tra il messaggio di connessione host menzionato e il ricaricamento del widget. – ryno2019

+0

probabilmente hai avuto lo stato di inattività per qualche istante mentre eseguivo il debug, quindi il debugger ha deciso di chiudere la connessione e recuperare la memoria. – bllakjakk

+0

Il mio widget si trova di fronte allo stesso problema. Nemmeno io sembra ricevere alcun avvertimento sulla memoria. Il widget funziona a circa 5 MB di memoria (sembra abbastanza alto). – bencallis

5

Finalmente ho trovato il problema con il mio widget. Si scopre che non ha nulla a che fare con NSXPCConnection, ma piuttosto un malinteso sul Widget Life Cycle per mio conto.

Dalla documentazione ho pensato che la vista odierna avrebbe mantenuto una "istantanea" dello stato dei miei widget fino a quando il gestore di completamento del metodo widgetPerformUpdateWithCompletionHandler è stato chiamato con successo.

Questo non sembra essere il caso. Da quello che posso vedere, l''istantanea' viene usata solo quando la Visualizzazione Oggi si sta animando (quando l'utente abbassa il centro notifiche). Non appena la vista odierna viene caricata e ferma, il widget viene caricato da zero (gonfiato da xib se in uso) e viene chiamato viewDidLoad. In questo momento è necessario popolare il widget con i dati memorizzati nella cache (non da una richiesta Web). Se non lo fai, vedrai dati temporanei dal tuo pennino. Questo è ciò che causa il lampeggiare.

Quando viewDidLoad è completo widgetPerformUpdateWithCompletionHandler viene chiamato, che consente di recuperare nuovi dati. Quando vengono recuperati i nuovi dati, è necessario chiamare il gestore di completamento e memorizzare i dati in modo che possano essere utilizzati quando il widget viene caricato in un secondo momento da zero (in viewDidLoad).

Un modo semplice per memorizzare nella cache i dati è nei valori predefiniti dell'utente.

Spero che questo aiuti.