Je travaille donc sur un clone de CoreDataBooks. C'est un peu différent. Lorsque le bouton '+' est appuyé, il lance un navController, contenant 2 vues. Le premier (AddPatientVC) demande le nom du patient puis il est poussé vers un second contrôleur de vue (AddPatientDetailVC) qui demande des informations plus détaillées. C'est le 2ème contrôleur de vue que j'ai configuré avec le délégué, pas le premier, comme dans CoreDataBooks. Pour une raison quelconque, lorsque la méthode déléguée est déclenchée, la méthode de notification ne se déclenche pas, j'ai donc perdu la trace de mon MOC, soit le MOC spécifique pour l'ajout d'un nouveau patient.Je pense avoir perdu mon contexte d'objet géré
L'erreur spécifique que je reçois est: « + entityForName: ne pouvait pas trouver un NSManagedObjectModel pour le nom de l'entité « patient » »
Voici mon code - addPatient, méthode déléguée et la méthode de notification. Toute suggestion sur la simplification serait appréciée. Thanx
-(void)addPatient:(id)sender
{
PatientAddViewController *patientAddViewController = [[PatientAddViewController alloc] initWithNibName:@"PatientAddViewController" bundle:nil];
PatientAddDetailViewController *patientAddDetailViewController = [[PatientAddDetailViewController alloc] initWithNibName:@"PatientAddViewController" bundle:nil];
patientAddDetailViewController.delegate = self;
//Create a new MOC for adding a book
NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
self.addPatientManagedObjectContext = addingContext;
[addingContext release];
[addPatientManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];
patientAddViewController.patient = (Patient *)[NSEntityDescription insertNewObjectForEntityForName:@"Patient" inManagedObjectContext:addingContext];
//patientAddViewController.addPatientManagedObjectContext = self.addPatientManagedObjectContext;
UINavigationController *addingNavController = [[UINavigationController alloc] initWithRootViewController:patientAddViewController];
[self.navigationController presentModalViewController:addingNavController animated:YES];
[addingNavController release];
[patientAddViewController release];
}
- (void)patientAddDetailViewController:(PatientAddDetailViewController *)controller didFinishWithSave:(BOOL)save
{
NSLog(@"Delegate Method fired");
if (save)
{
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
//The notification isn't firing becuase addPatientManagedObjectContext is null for some reason
[dnc addObserver:self selector:@selector(addControllerContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:addPatientManagedObjectContext];
NSError *error;
//if (![patient.managedObjectContext save:&error])
if (![addPatientManagedObjectContext save:&error])
{
NSLog(@"Before Error");
//Handle the error...
NSLog(@"Unresolved Error %@, %@",error, [error userInfo]);
exit(-1);//Fail
NSLog(@"After Error");
}
[dnc removeObserver:self name:NSManagedObjectContextDidSaveNotification object:addPatientManagedObjectContext];
}
self.addPatientManagedObjectContext = nil;
[self.tableView reloadData];
[self dismissModalViewControllerAnimated:YES];
}
- (void)addControllerContextDidSave:(NSNotification*)saveNotification {
NSLog(@"Save Notification Fired");
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
// Merging changes causes the fetched results controller to update its results
[context mergeChangesFromContextDidSaveNotification:saveNotification];
}
Ok. J'ai travaillé en quelque sorte. La tableView n'a pas rechargé sauf si je suis retourné à mon écran principal et vice-versa, donc je pense que j'ai stocké accidentellement au MOC principal et pas le détaillé. hmmmm – monotreme