2009-12-06 4 views
0

J'ai un NSWindow que j'utilise pour créer de nouveaux enregistrements. Après avoir appuyé sur le bouton Ajouter, une certaine méthode est appelée dans lequel je fais ce qui suit:Données de base: propriétés d'entité se mélangeant

- (IBAction)addActionAddSheet:sender { 
    NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"Recipe" inManagedObjectContext:moc]; 

    [newObject setValue:[newRecipeName stringValue] forKey:@"name"]; 
    [newObject setValue:[newRecipeInstructions string] forKey:@"instructions"]; 

    NSLog(@"New object is: %@", newObject); 

    [NSApp endSheet:addSheet]; 
    [addSheet orderOut:sender]; 
} 

Le (modifié) sortie NSLog après avoir exécuté deux fois, se présente comme suit:

<NSManagedObject: 0x10045c6a0> (entity: Recipe; id: 0x1004564a0 <x-coredata:///Recipe/t18FEC674-8937-49DF-A18B-940EF82E83C32> ; data: { 
    instructions = X; 
    name = X; 
}) 
<NSManagedObject: 0x1149069a0> (entity: Recipe; id: 0x100106a20 <x-coredata:///Recipe/t18FEC674-8937-49DF-A18B-940EF82E83C33> ; data: { 
    instructions = Y; 
    name = Y; 
}) 

C'est complètement comme prévu. Cependant, ma vue de table, qui est liée à un contrôleur de matrice, montre que les objets X et Y ont X comme valeur pour instructions.

Lorsque je quitte ma demande et les données sont enregistrées, ce que je vois dans mon fichier xml est encore différent:

<attribute name="name" type="string">Y</attribute> 
    <attribute name="instructions" type="string">Y</attribute> 

    <attribute name="name" type="string">X</attribute> 
    <attribute name="instructions" type="string">Y</attribute> 

Cette fois, ils ont tous deux la valeur Y.

La sortie de NSLog montre que j'ai affaire à deux objets différents ici, donc je ne suis pas sûr de ce que je pourrais faire qui pourrait influencer les deux.

Ce sont est ma sortie non éditée:

2009-12-07 14:46:18.409 Recipe[11578:a0f] managedObjectContext 
2009-12-07 14:46:18.411 Recipe[11578:a0f] persistentStoreCoordinator 
2009-12-07 14:46:18.411 Recipe[11578:a0f] managedObjectModel 
2009-12-07 14:46:18.423 Recipe[11578:a0f] applicationSupportDirectory 
2009-12-07 14:46:18.436 Recipe[11578:a0f] externalRecordsDirectory 
2009-12-07 14:46:20.484 Recipe[11578:a0f] Show Add sheet 
2009-12-07 14:46:20.485 Recipe[11578:a0f] Clear values 
2009-12-07 14:46:20.494 Recipe[11578:a0f] call beginSheet 
2009-12-07 14:46:23.632 Recipe[11578:a0f] addActionAddSheet: -- Add button clicked 
2009-12-07 14:46:23.632 Recipe[11578:a0f] Create new mananged obj in context 
2009-12-07 14:46:23.634 Recipe[11578:a0f] managedObjectContext 
2009-12-07 14:46:23.635 Recipe[11578:a0f] Set values for name and instructions 
2009-12-07 14:46:23.636 Recipe[11578:a0f] New object is: <NSManagedObject: 0x1001c89c0> (entity: Recipe; id: 0x1001c9470 <x-coredata:///Recipe/tE9BD4EE3-082C-4715-AB66-2C3580223F9E2> ; data: { 
    instructions = A; 
    name = A; 
}) 
2009-12-07 14:46:23.636 Recipe[11578:a0f] call [NSApp endSheet:] and [addSheet orderOut:] 
2009-12-07 14:46:23.637 Recipe[11578:a0f] addSheetDidEnd:returnCode:contextInfo: -- empty method 
2009-12-07 14:46:35.327 Recipe[11578:a0f] Show Add sheet 
2009-12-07 14:46:35.328 Recipe[11578:a0f] Clear values 
2009-12-07 14:46:35.337 Recipe[11578:a0f] call beginSheet 
2009-12-07 14:46:39.836 Recipe[11578:a0f] addActionAddSheet: -- Add button clicked 
2009-12-07 14:46:39.836 Recipe[11578:a0f] Create new mananged obj in context 
2009-12-07 14:46:39.838 Recipe[11578:a0f] managedObjectContext 
2009-12-07 14:46:39.839 Recipe[11578:a0f] Set values for name and instructions 
2009-12-07 14:46:39.843 Recipe[11578:a0f] New object is: <NSManagedObject: 0x102070ad0> (entity: Recipe; id: 0x10205e420 <x-coredata:///Recipe/tE9BD4EE3-082C-4715-AB66-2C3580223F9E3> ; data: { 
    instructions = B; 
    name = B; 
}) 
2009-12-07 14:46:39.843 Recipe[11578:a0f] call [NSApp endSheet:] and [addSheet orderOut:] 
2009-12-07 14:46:39.844 Recipe[11578:a0f] addSheetDidEnd:returnCode:contextInfo: -- empty method 

Recette A:

http://web.me.com/bpeiren/recipeA.png

Recette B:

http://web.me.com/bpeiren/recipeB.png

Mon contrôleur RAID:

http://web.me.com/bpeiren/Cocoa/so/array_controller.png

fixations Ma colonne de table:

http://web.me.com/bpeiren/Cocoa/so/tablecolumn.png

fixation Mon label:

http://web.me.com/bpeiren/Cocoa/so/label.png

+0

Vous pouvez publier des exemples de données sans les modifier. Assez souvent dans le débogage vous êtes coincé sur une hypothèse et ne le réalisez pas. Vous pourriez cacher le bug dans votre édition des données. Publiez les données réelles entrées dans l'interface. Les données réelles imprimées par NSLog etc. – TechZen

Répondre

2

Comment vous liez votre table/colonnes au contrôleur de tableau? Il semble que votre colonne Instructions ne soit pas liée à arrangedObjects.instructions, mais peut-être selection.instructions.

+0

Mon NSArrayController est lié à l'entité nommée Recipe. Mes TableColumns sont liés aux chemins clés des objetsObjects de la recette. Mes objets de vue détaillée (textfield et textview) sont liés à selection.name et selection.instructions. Lorsque j'ajoute la deuxième recette, la vue de table montre que la recette A et la recette B ont comme instructions 'B', tandis que la vue de détail montre encore qu'elles ont 'A' comme instructions. – nephilim

+0

Vous devrez peut-être prendre une capture d'écran des paramètres de liaison pour la colonne et l'étiquette de détail et les publier. Je serais très surpris si le problème n'était pas là. –

+0

J'ai ajouté des captures d'écran pour le contrôleur de tableau et les liaisons. J'ai seulement inclus la valeur de liaison puisque les autres ne sont liés à rien. – nephilim

Questions connexes