2015-09-13 1 views
1

J'essaie de créer une sous-classe de NSManagedObject dans swift. J'ai créé deux entités appelées Pages et Livre dans l'éditeur de modèle et généré leurs fichiers de classe. Voici les deux classes:Données de base NSEntityDescription.entityForName renvoie zéro, mais managedObjectModel.entities répertorie les entités

@objc(Pages) 
class Pages: NSManagedObject { 

    @NSManaged var pageNo: NSNumber 

} 

@objc(Book) 
class Book: NSManagedObject { 

    @NSManaged var pageCount: NSNumber 
    @NSManaged var title: String 
    @NSManaged var fetchLastPage: [Pages] 

} 

En tant que test pour créer une instance de pages que j'ai écrit ce code dans viewDidLoad qui a échoué parce qu'elle n'a pas pu trouver l'entité dans le modèle:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext! 

    var pages = NSEntityDescription.insertNewObjectForEntityForName("StoreTest.Pages", inManagedObjectContext: managedContext) 

' StoreTest 'est le nom de mon application qui est également défini dans l'éditeur de modèle pour les deux entités. Pour voir ce qui se passe j'ai ajouté ce code avant de créer l'instance:

var pagesEntity = NSEntityDescription.entityForName("StoreTest.Pages", inManagedObjectContext: managedContext) 
    println("pagesEntity = \(pagesEntity)") 

    var ents = managedContext.persistentStoreCoordinator!.managedObjectModel.entities 
    println("entities = \(ents)") 

Le retour de l'appel NSEntityDescription.entityForName nul, mais l'appel à managedObjectModel.entities renvoie les deux entités.

J'ai vérifié qu'il n'y avait pas de problème d'orthographe. En outre, managedObject n'est pas nul. La cible de mon fichier de modèle de données est correctement définie sur mon module d'application.

J'utilise xCode 6.4.

Merci pour votre aide!

+0

Je n'ai jamais attaché un point dans le nom de l'entité. Bien que je n'ai pas vu de docs dire non, avez-vous essayé de le retirer et pourquoi en avez-vous besoin? – Wain

+0

C'était le problème. Merci! J'ai sorti le nom du module. – user2732722

+0

C'est entityForName, pas entityForClassName. Le nom de votre entité est "Pages". – Willeke

Répondre

2

Supprimez le StoreTest. supplémentaire du nom de l'entité, vous n'en avez pas besoin et le point cause probablement un problème avec la recherche.

En fait, il se peut que vous soyez confus au sujet du nom de l'entité, qu'il soit défini dans le modèle, puis que vous définissiez le nom de la classe (généralement le même que le nom de l'entité).