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!
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
C'était le problème. Merci! J'ai sorti le nom du module. – user2732722
C'est entityForName, pas entityForClassName. Le nom de votre entité est "Pages". – Willeke