0 votes

Core Data : les propriétés des entités se mélangent

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 laquelle je fais ce qui suit :

- (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];
}

La sortie (éditée) de NSLog après l'avoir exécutée deux fois, est la suivante :

<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 tout à fait conforme aux attentes. Cependant, mon tableview, qui est lié à un contrôleur de tableau, montre que les objets X et Y ont tous les deux X comme valeur pour instructions .

Lorsque je quitte mon application et que les données sont sauvegardées, ce que je vois dans mon fichier xml est à nouveau 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 de la valeur Y .

La sortie de NSLog montre que j'ai affaire à deux objets différents, donc je ne sais pas ce que je fais qui pourrait influencer les deux.

Il s'agit de ma production 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 :

Recette B :

Mon contrôleur de réseau :

Les liaisons de la colonne de mon tableau :

Mon étiquette est reliée :

2voto

Joshua Nozzi Points 38718

Comment liez-vous votre tableau / vos colonnes au contrôleur de tableau ? Il semble que votre colonne Instructions ne soit pas liée à arrangedObjects.instructions mais il est possible que instructions.de.sélection .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X