45 votes

Le transfert de 'NSPersistentStoreResult' vers un type non apparenté 'Entity' échoue toujours.

Je suis en train de créer une petite application pour apprendre les relations entre plusieurs personnes dans CoreData. Cependant, en utilisant le code ci-dessous, j'obtiens une erreur lors du transfert de mon NSFetchResult vers ma classe Entity ('Groepering') :

enter image description here

Je ne vois aucune différence entre les échantillons que j'ai trouvés sur Internet et mon projet, pourquoi le moulage échoue-t-il toujours ?

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

let fetchRequest : NSFetchRequest = NSFetchRequest(entityName: "Entity")

    do {
        let fetchResults = try managedContext.executeRequest(fetchRequest)
        let groeperingen = fetchResults as! [Entity]
        // Here I get the Error: ^

    } catch {
        print("Error")
}

4 votes

C'est juste une faute de frappe : managedContext.executeFetchRequest(fetchRequest)

104voto

Ahmed Onawale Points 2778

Utilice executeFetchRequest de NSManagedObjectContext lors de l'exécution d'une NSFetchRequest.

Editer Swift 3 : Pour Swift 3, utilisez :

let result = try managedContext.fetch(fetchRequest)

0 votes

Merci ! Après l'avoir lu des milliers de fois, je continuais à le relire et à le lire correctement dans ma tête.

2 votes

Dans Swift 3, cette commande a été modifiée en NSManagedObjectContext.fetch(NSFetchRequest<NSFetchRequestRe‌​sult>) Lien vers Apple Docs

2 votes

J'appelais let result = try managedContext.execute(fetchRequest) et passer quelques heures à trouver la mauvaise méthode d'exécution de la typo pour aller chercher

14voto

blwinters Points 947

J'ai récemment converti mon code en Swift 3 et j'ai rencontré la même erreur, mais pas à cause d'une faute de frappe. Il semble que le nouvel appel de fonction équivalent soit let fetchResults = try managedContext.fetch(fetchRequest) .

2 votes

Cela a fonctionné pour moi dans Swift 3. Il existe également une méthode managedObjectContext.execute(request), mais elle produit les mêmes problèmes que ci-dessus.

1 votes

@PabloMartinez J'ai lancé les résultats en utilisant let fetchResults = try managedContext.fetch(fetchRequest) as! [MySubclass] .

1 votes

@PabloMartinez également un let fetchRequest = NSFetchRequest<MySubClass>(entityName: "MyModel") fera en sorte que vos fetchResults soient castées en [MySubClass]

2voto

iDev750 Points 82

Voici la solution (mise à jour pour Swift 4) :

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Device")
    do {
        if let results = try persistentContainer.viewContext.fetch(fetchRequest) as? [NSManagedObject] {
            for result in results {
                if let name = result.value(forKey: "name") as? String, let type = result.value(forKey: "type") as? String {
                    print(name, "is an ", type)
                }
            }
        }
    } catch {
        print("Failed to fetch data request.")
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X