2017-02-03 3 views
0

J'ai deux classes A et B avec une relation 1: n de A à n B. Dans A il y a un attribut de relation bs (non ordonné) et dans B il y a l'attribut de relation.Échec de l'appel de l'initialiseur désigné dans la classe NSManagedObject appelant Ajout de NSArrayController

En réalité, A et B sont NSManagedObject générés automatiquement à partir du modèle de données de base du projet.

Dans un NSViewController, j'ai un ArrayController et un NSTableView basé sur une cellule à travers lequel j'ai besoin d'afficher et de gérer les b.

Le ArrayController a:

  1. Mode: Classe
  2. Nom de la classe: B
  3. set de contenu lié à a.bs

Chaque colonne de la table est liée au contrôleur Array arrangedObjects.b_attribute

Le tableau montre les b comme prévu et je peux les éditer.

Des problèmes surviennent lorsque vous essayez d'ajouter un nouveau b.

Le contrôleur possède un bouton et son action est liée à la méthode Array Controller add:.

Malheureusement, quand j'appuie sur le bouton, je reçois l'erreur suivante:

error: CoreData: error: Failed to call designated initializer 
on NSManagedObject class 'B' 

CoreData: error: CoreData: error: Failed to call designated 
initializer on NSManagedObject class 'B' 

Creuser StackOverflow J'ai trouvé que le problème peut être lié à la création d'objets gérés en utilisant:

... = [[B alloc] init]; 

place de

... = [NSEntityDescription insertNewObjectForEntityForName:@"B" inManagedObjectContext:_managedObjectContext]; 

Puisque je ne crée pas explicitement b objets, je ne C'est le cas, mais je ne suis pas capable de comprendre ce que je fais de mal.

Merci d'avance pour toute aide fournie.

Répondre

0

Régler le ArrayController:

Mode: Nom de l'entité

Entité Nom: B

Prépare Contenu: OUI

+0

Malheureusement, cela ne résout pas le problème. Tks, de toute façon. – Fab

+0

Toujours la même erreur? – Willeke

+0

Exactement le même – Fab

0

Je TRIEES cette question comme suit:

  1. ArrayController lié dans le code comme bsController
  2. le bouton démarre une méthode pour ajouter un nouveau B:

    • (IBAction) nouveauB: (NSButton *) expéditeur {

    B * b = [NSEntityDescription insertNewObjectForEntityForName: @ "B" inManagedObjectContext : _managedObjectContext];

    [_bsController addObject: b]; }

Cela fonctionne, en créant correctement une ligne vide dans la table.