Программа получила сигнал: EXC_BAD_ACCESS - PullRequest
0 голосов
/ 07 июля 2011

У меня есть следующий метод в моем подклассе UITableViewController:

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

}

И я вызываю его в своих приложениях didFinishLaunchingWithOptions метод в моем AppDelegate, метод также находится в том же AppDelegateКогда он вызывается, я получаю сообщение об ошибке при отладке, если я не отлаживаю строку, он запускает метод и загружается без проблем.Если я вообще не отлаживаю, он не вызовет метод.

РЕДАКТИРОВАТЬ: изменил код в соответствии с ответом, проблема остается прежней, если я просто запустить ничего не происходит, но при отладке я получаю ошибку,При отладке всего метода ошибки не отображаются.

1 Ответ

3 голосов
/ 08 июля 2011

Ваш вызов NSLog пытается получить доступ к свойству name вашей переменной person. Однако, когда вы объявили переменную person, вы не инициализировали ее, поэтому она указывает на мусор. Вы только даете ему допустимое значение в своем предложении else, поэтому иногда ваш NSLog обращается к неинициализированному объекту.

...