J'ai une classe de modèle Objective-C MyType. Cette classe est utilisée dans Swift code:
NSEntityDescription.insertNewObjectForEntityForName("MyType", inManagedObjectContext: context) as! MyType
Le as!
cast génère le message d'erreur
Core Data: Could not cast value of type 'MyType_MyType_2' (0x7be99a30) to MyType (0xf33db74).
Si je le transforme en NSManagedObject
cela fonctionne. Lorsque j'imprime le résultat, je peux néanmoins voir qu'il s'agit d'une instance réelle de MyType:
<MyType: 0x7ae06d50> (entity: MyType; id: 0x7aeba6d0 <x-coredata:///MyType/t957F2860-85F8-46E0-B6D6-4D1DF6C4EC613> ; data: {
...the fields...
})
Que se passe-t-il ici? Et d'où vient le nom MyType_MyType_2
viens de?
Lorsque j'ai eu ce problème, c'est parce que j'avais oublié de définir la "classe" sur l'entité. Voici ce que j'ai trouvé:
Vous remarquerez même avant de suivre ces étapes que la "classe" par défaut est NSObject, reflétant le message d'erreur. J'ai également trouvé des moyens programmatiques de le faire, mais cela semblait être la solution la plus simple/la plus rapide.
Je dois noter que mon modèle était écrit en Swift, j'ai donc dû ajouter la référence d'interopérabilité @objc (Entity) mentionnée par @zellb. Mais cela ne devrait pas faire de différence dans la solution tant que vous faites cette partie correctement (et cela provoquerait une erreur non liée différente de ma compréhension).
essayez ceci:
@objc(MyType)
public class MyType: NSManagedObject {
// your class
}
au lieu de cela:
class MyType: NSManagedObject {
// your class
}
J'avais par erreur défini une "entité parent" dans l'une de mes entités dans l'inspecteur de modèle de données dans la section entité. J'ai pensé à tort que cela faisait référence à la destination d'une relation un-à-plusieurs.
Le redéfinir sur "aucune entité parent" a résolu le problème, même si j'ai dû supprimer et réinstaller l'application dans le simulateur pour gérer la base de données de données de base foirée.