Comment définir une relation CoreData dans Swift?
Dans CoreData, j'ai défini un non-ordonnée à plusieurs relations de Node
à Tag
. J'ai créé un Swift entité comme ceci:
import CoreData
class Node : NSManagedObject {
@NSManaged var tags : Array<Tag>
}
Maintenant, je veux ajouter un Tag
à une instance de Node
comme ceci:
var node = NSEntityDescription.insertNewObjectForEntityForName("Node", inManagedObjectContext: managedObjectContext) as Node
node.tags.append(tag)
Toutefois, il échoue avec l'erreur suivante:
Résiliation d'application en raison de uncaught exception 'NSInvalidArgumentException', la raison: "Inacceptable type de valeur à plusieurs relations: property = "tags"; type = NSSet; type = _TtCSs22ContiguousArrayStorage000000000b3440d4; valeur = (
"<_TtC8MotorNav3Tag: 0xb3437b0> (entité: Tag; id: 0xb343800 ; données: {...})"
).'
Quel est le type correct pour de nombreuses relations?
source d'informationauteur bouke
Vous devez vous connecter pour publier un commentaire.
Pour être en mesure de travailler avec un-à-plusieurs relations en Swift, vous devez définir la propriété:
Si vous essayez d'utiliser
NSMutableSet
modifications ne seront pas enregistrées dans CoreData. Et bien sûr, il est recommandé de définir la liaison inverse dansNode
:Mais toujours Swift ne peut pas créer des accesseurs dans l'exécution, nous avons donc besoin de les définir manuellement. Il est très pratique de les définir dans la classe
extension
et de mettre enEntity+CoreData.swift
fichier. Soufflet est le contenu deNode+CoreData.swift
fichier:Utilisation:
Important: Pour les faire fonctionner, vous devez vérifier que les noms de classes d'entités dans vous CoreData modèle inclut votre nom de module. E. g.
MyProjectName.Node
De Xcode 7 et Swift 2.0, le note de version 17583057 états:
Donc vous avez juste à déclarer les méthodes et CoreData va prendre soin de tout le reste:
En fait, vous pouvez simplement définir:
Et l'utilisation de la
insert
etremove
méthodes de laSet
directement.Bâtiment sur @Keenle réponse, si vous voulez être culotté et concise et être en mesure de dire
on peut encapsuler l'appel à l'autonomie.mutableSetValueForKey: