2015-01-28 7 views
5

Quindi ho un widget di Today View creato dalla mia applicazione principale, e sto cercando di accedere ad alcuni dati memorizzati (tramite CoreData). Ma quando sto creando la variabile lazy per gestire una delle mie entità, non riesce a compilare. Comprendo l'errore che genera, ma non sono sicuro di come gestirlo/risolverlo.Come fare riferimento a AppDelegate da un widget Visualizza oggi?

lazy var managedObjectContext : NSManagedObjectContext? = { 
    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    if let managedObjectContext = appDelegate.managedObjectContext { 
     return managedObjectContext 
    } 
    else { 
     return nil 
    } 
    }() 

L'errore si butta a sulla linea 2 a ... "come AppDelegate" che si tratta di un "uso non dichiarato di AppDelegate." Quale immagino abbia senso perché AppDelegate è nella cartella dell'applicazione di base e non nella cartella del widget. Ma sono in perdita di come sostituire o riparare questo in modo che il codice si compili e funzioni. Qualche idea?

risposta

2

Non è possibile. Le estensioni sono binari completamente separati dal pacchetto principale dell'app, che è il luogo in cui si trova il delegato dell'app. Dovrai creare una libreria condivisa che verrà utilizzata dal bundle e dall'estensione dell'app principale, oppure fare un sacco di codice di copia-incolla (il metodo precedente è preferito).

Dal developer guides:

è possibile creare un quadro integrato per condividere codice tra la vostra applicazione estensione e la sua contenente app. Ad esempio, se si sviluppa un filtro immagine da utilizzare nell'estensione di modifica foto e nell'app contenente il codice, inserire il codice del filtro in un framework e incorporare il framework in entrambe le destinazioni.

Non è necessario creare una libreria collegabile formale se non si desidera. Assicurati che la libreria che stai scrivendo non faccia riferimento alle API che non sono disponibili per le estensioni.

Assicurarsi che il framework embedded non contiene le API non disponibili per estensioni app, come descritto in Some APIs Are Unavailable to App Extensions. Se si dispone di un framework personalizzato che contiene tali API, è possibile collegarsi in modo sicuro a dall'app contenente ma non condividere il codice con le estensioni contenute dell'app. L'App Store rifiuta qualsiasi estensione dell'app che si collega a tali framework o che altrimenti utilizza le API non disponibili .