2016-01-27 3 views
1

J'écris un programme qui implique des données de base. J'ai créé une variable de classe pour mon contexte et entité et ai mon code écrit comme ceci:Erreur de chargement de chargement paresseux

class PersistencyManager { 

    var context : NSManagedObjectContext{ 
     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let localContext = appDelegate.managedObjectContext 
     return localContext 
    } 
    var userEntity : NSEntityDescription { 
     let entity = NSEntityDescription.entityForName(EntityNames.User, inManagedObjectContext: context) 
     return entity! 

    } 
    struct EntityNames { 
     private static let User = "User" 
     private static let Category = "Category" 
    } 
} 

Tout est si fonctionne bien bien, mais ce que je veux faire est de « paresseux » ly charge userEntity

Comme ceci:

lazy var userEntity : NSEntityDescription = { 
     let entity = NSEntityDescription.entityForName(EntityNames.User, inManagedObjectContext: context) 
     return entity! 

    }() 

Mais quand je le fais, je reçois une erreur: « Dans Le membre de l'instance 'contexte' ne peut pas être utilisé sur le type 'Gestionnaire de la persistance' "

Qu'est-ce que je fais mal? Comment puis-je atteindre mon objectif?

Merci!

Répondre

2

Essayez let entity = NSEntityDescription.entityForName(EntityNames.User, inManagedObjectContext: self.context)

Remarque J'utilise self.context au lieu de simplement context. Cela construit pour moi dans une aire de jeux.

+0

La syntaxe '= {...}()' est utilisée pour définir (puis exécuter) un bloc de code pour, dans ce cas, une séquence d'initialisation complexe. –

+0

@DavidBerry Merci, vous avez raison - pensait à un problème différent. Mise à jour ma réponse –

+0

Je l'ai maintenant. Le problème est que le bloc de code anonyme n'accède pas automatiquement aux variables d'instance sans spécifier de self, et non que le message d'erreur donne un indice à cela. –