Le problème ici est que votre accesseur et votre ivar ont le même nom. C'est de là que vient la convention ivar underbar. Ici, vous n'utilisez pas l'accesseur pour accéder à votre propriété, vous utilisez directement la variable de support, qui ne sera donc jamais initialisée. Au lieu de cela, assurez-vous de toujours passer par les méthodes de votre accesseur et vous n'aurez pas de problème. Réécrivez donc la méthode incriminée (et toutes les autres qui utilisent l'accesseur managedContextObject
avec quelque chose comme ce qui suit :
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing
// Get a reference to the managed object context *through* the accessor
NSManagedObjectContext* context = [self managedObjectContext];
// From now on, we only use this reference in this method
NSFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor
[request setEntity:entity];
NSError* error = nil;
NSArray* array = [context executeFetchRequest:request error:&error];
if( !array ) {
// Do something with the error
NSLog(@"Error Fetching: %@", error);
}
[self setDesitnationsArray:[array mutableCopy]];
[destinationsTableView reloadData];
}
Vous voudrez peut-être changer vos ivars pour quelque chose que vous ne serez pas tenté d'utiliser ou qui montrera immédiatement que vous n'avez pas passé en revue les accesseurs, par exemple _managedObjectContext
ou même _privateContext
ou quoi que ce soit d'autre vous sautera aux yeux jusqu'à ce que vous vous habituiez à accéder aux propriétés par le biais des accesseurs. Si vous n'aimez pas la syntaxe Objective-C pour accéder aux propriétés, vous pouvez utiliser la syntaxe point, mais vous devez toujours vous rappeler de passer par self
par exemple, self.managedObjectContext
. Je n'aime pas cette méthode car les gens oublient qu'il ne s'agit pas d'un accès direct à la propriété et qu'ils utilisent les accesseurs. Ils pensent donc qu'il est acceptable d'interchanger la syntaxe du point pour un accès direct, alors que ce n'est pas le cas (comme dans votre cas).