2014-07-10 22 views
8

ho un riferimento alla mia app delegatoclassName.type non ha un membro chiamato 'appDel'

let appDel: AppDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate 

Questo funziona bene, ma questa riga di codice che segue riporta un errore:

let context: NSManagedObjectContext = appDel.managedObjectContext 

mi dà il seguente errore:

'vctGebruikers.Type' does not have a member named 'appDel' 

li ho dichiarato proprio sotto la mia classe in questo modo:

class vctGebruikers: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    let appDel: AppDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate 
    let context: NSManagedObjectContext = appDel.managedObjectContext 
} 

La cosa strana è quando si incolla il codice in viewDidLoad o in una funzione il codice funziona correttamente. E non riesco a capire quale sia il problema. Come posso risolvere questo errore?

EDIT: ho anche bisogno di acces contesto qui:

let results: NSArray = context.executeFetchRequest(request, error: nil) 

Questo è quello che ho ottenuto grazie al lavoro per @Antonio, ma ora non è im grado di acces contesto e appDel

init(coder aDecoder: NSCoder!) { 
    let appDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate 
    self.appDel = appDelegate 
    self.context = appDelegate.managedObjectContext 
    super.init(coder: aDecoder) 
} 
+1

make 'appDel' un calcolato' GET' proprietà - ha più senso – kambala

risposta

0

In swift non è possibile fare riferimento a self fino a quando tutte le proprietà di classe non sono state inizializzate. Si implicitamente utilizzando self in questa linea:

let context: NSManagedObjectContext = appDel.managedObjectContext 

La soluzione è inizializzare loro in un inizializzatore, ma con qualcosa di simile:

let appDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate 
self.appDel = appDelegate 
self.context = appDelegate.managedObjectContext 

visualizzato anche here, una domanda simile chiesto un paio di giorni fa su SO.

+0

che funziona grazie, ma io bisogno di accedere ad appDel e Context dare un'occhiata alla mia domanda aggiornata. – Bas

+0

beh, se 'results' è un'altra proprietà di classe, quindi la stessa cosa si applica ad esso. Durante l'inizializzazione stai usando implicitamente 'self'. Basta creare un'altra variabile di supporto 'let ctx = appDelegate.managedObjectContext' e usarla per inizializzare sia 'self.context' che' self.results' – Antonio

0

Un metodo di istanziare il contesto è di drill-down anziché dal AppDelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    if let vc = window?.rootViewController as? UIViewController { 
     vc.context = self.managedObjectContext} 

`

E nel vostro controller della vista, dillo alla popolare dinamicamente

var context: NSManagedObjectContext!

Inoltre, non dimenticare di chiamare import CoreData ovunque tu stia usando detto obje cts

più Un metodo finale: utilizzare una chiusura in modo che il vostro riferimento avverrà in fase di esecuzione: var context: NSManagedObjectContext { let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate return appDelegate.managedObjectContext }

Problemi correlati