2011-07-07 8 views
0

J'ai la méthode suivante dans mon sous-classe UITableViewController:Programme signal reçu: EXC_BAD_ACCESS

-(void)populateDataStorage{ 

NSString *path = [[NSBundle mainBundle] pathForResource:@"FakeData" ofType:@"plist"]; 

if(path){ 
    NSArray *plistData = [[NSArray alloc] initWithContentsOfFile:path]; 
    NSEnumerator *enumerator = [plistData objectEnumerator]; 

    NSArray *personResults; 

    Photo *photo; 
    Person *person; 

    id currItem = [enumerator nextObject]; 

    while (currItem != nil) { 
     photo = (Photo *)[NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext: [[FlickrFetcher sharedInstance] managedObjectContext]]; 

     photo.name = [currItem objectForKey:@"name"]; 
     photo.path = [currItem objectForKey:@"path"]; 

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", [currItem objectForKey:@"user"]]; 

     personResults = [[FlickrFetcher sharedInstance] fetchManagedObjectsForEntity:@"Person" withPredicate:predicate]; 

     if ([personResults count] > 0) { 
      person = [personResults objectAtIndex:0]; 
     } 
     else { 
      person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[[FlickrFetcher sharedInstance] managedObjectContext]]; 
      person.name = [currItem objectForKey:@"user"]; 
     } 

     photo.person = person; 
     [person addPhotosObject:photo]; 

     NSLog(@"Photo %@ added for user %@", photo.name, person.name); 

     currItem = [enumerator nextObject]; 
    } 

    [plistData release]; 
} 

}

Et je l'appelle dans mes applications de la méthode de didFinishLaunchingWithOptions dans mon AppDelegate, la méthode est également dans le même AppDelegate, quand il est appelé, j'obtiens l'erreur qu'il dit lors du débogage, si je ne débogue pas la ligne, il lancera la méthode et chargera sans problème. Si je ne débogue pas du tout, il n'appellera pas la méthode.

EDIT: Modifié le code en fonction de la réponse le problème reste toujours le même, si je ne fais rien, rien ne se passe mais lors du débogage je reçois l'erreur. Lorsque je débogue toute la méthode, aucune erreur n'est affichée.

Répondre

3

Votre appel à NSLog tente d'accéder à la propriété name de votre variable person. Toutefois, lorsque vous avez déclaré votre variable person, vous ne l'avez pas initialisée, ce qui indique qu'elle est corrompue. Vous ne lui donnez une valeur valide que dans votre clause else, votre NSLog accède parfois à un objet non initialisé.

+0

J'ai modifié le code et mis à jour mon post, le problème persiste – 8vius

+0

Comment avez-vous modifié le code? Pouvez-vous ajouter le code mis à jour à votre message? – highlycaffeinated

+0

Ce que j'ai fait était de définir l'objet personne dans les deux cas de l'instruction if, pour corriger ce que vous avez dit, de cette façon quand j'accède à la propriété de son nom, il est toujours défini sur quelque chose – 8vius

Questions connexes