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 :