Comment initialiser un générateur de Base de Données NSManagedObject en Swift
Je sais obj-c, mais je suis en apprentissage swift.
En obj-c lors de l'utilisation de données de base de la modélisation de vos données et de dire xcode pour générer un nsmanageobject sous-classe de votre modèle.
Ensuite, dans le code d'initialisation comme
#import MyObject
- (void) someMethod
{
MyObject *my = (Card *) [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:[self managedObjectContext]];
my.name = @"some name";
}
Dans swift, je suis en train de faire la même chose mais je n'arrive pas à comprendre comment initialiser mon objet personnalisé.
C'est ce que j'ai:
Générés NSManagedObject sous-classe:
importation de la Fondation
importation CoreData
class Card: NSManagedObject
{
@NSManaged var card_name: String
@NSManaged var card_id: String
@NSManaged var card_issuer: String
@NSManaged var card_type: String
}
Alors j'essaie de l'utiliser sur une autre classe, comme ceci:
var card : Card
card.card_name = "Some Name"
card.card_issuer = "HOA"
card.card_type = "Rec Center"
card.card_id = "123"
Mais l'erreur que j'obtiens est:
Variable 'carte' utilisé avant d'être initialisé
Je suis évidemment raté une étape mais je ne peux pas le point de ce qu'il est.
Aussi, comme mentionné par mentionnée par plusieurs iOS instructeurs vous ne devriez pas jouer avec les générées NSManagedObject sous-classe.
Des suggestions?
Modifier
J'obtiens une erreur: (devrait probablement être une nouvelle question...)
CoreData: avertissement: Impossible de charger la classe nommée "Fiche" pour l'entité "Carte'. La classe n'est pas trouvé, en utilisant par défaut NSManagedObject à la place.
Voici les captures d'écran pour montrer comment cette Classe existe dans la phase de construction et le nom de l'entité a été définie dans le fichier xcdatamodeld
Grâce
OriginalL'auteur TooManyEduardos | 2015-03-26
Vous devez vous connecter pour publier un commentaire.
Votre avoir ceci:
Qui déclare que
card
est de typeCard
mais ne prend pas en créer une instance. Vous avez besoin d'allouer et initialiser une instance avant de l'utiliser. L'initialisation de la règle ici est la même qu'en Objective-C, c'est à dire que vous devez appeler un désigné d'initialiseur sur l'objet. Vous feriez quelque chose comme ceci:Pour ce que ça vaut, votre Objectif-C, l'extrait de code est incorrect, parce que
init
n'est pas désigné un initialiseur pourNSManagedObject
.Je ne sais pas pourquoi vous pensez que cela nécessite KVC. En supposant que votre modèle est configuré correctement, cela va créer une instance de
Card
, et vous pouvez les appeler toutes les méthodes qui existent sur la Carte".Désolé, je viens de réaliser que vous avez eu la Carte" à la fin et vous êtes à l'aide de la EntityDescription directement au lieu d'un 2 étape que j'ai utilisé sur l'obj-c. Permettez-moi de voir comment cela fonctionne. Merci!
Bizarre, je reçois un "CoreData: avertissement: Impossible de charger la classe nommée "Fiche" pour l'entité "Carte'. La classe n'est pas trouvé, en utilisant par défaut NSManagedObject à la place."
Cela sonne comme la classe
Card
n'est pas inclus dans la cible que vous êtes en train de construire.OriginalL'auteur Tom Harrington
Vous déclarez la variable
card
mais jamais l'initialiser.Vous aurez besoin de la Base de Données de contexte et ensuite, vous pouvez créer une instance:
Que vais mettre en place un vide
Card
exemple dans le contexte. Lorsque vous enregistrez le contexte, votre nouvelle carte sera là dans le magasin.OriginalL'auteur gregheo