2011-07-07 74 views
0

我在我的UITableViewController子类下面的方法:程序接收到的信号: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]; 
} 

}

而且我把它在我的应用程序didFinishLaunchingWithOptions方法在我的AppDelegate,方法也是相同AppDelegate,当它被调用时,我得到它在调试时出现的错误,如果我不调试这条线,它将运行该方法并加载没有问题。如果我根本不调试,它将不会调用该方法。

编辑:根据答案更改了代码问题仍然保持不变,如果我只是运行没有任何反应,但在调试时出现错误。当我调试整个方法时,不显示错误。

回答

3

您致电NSLog正尝试访问person变量的name财产。但是,当你声明你的person变量时,你没有初始化它,所以它指向垃圾。你只在else子句中给它一个有效值,所以有时你的NSLog正在访问一个未初始化的对象。

+0

我修改了代码并更新了我的帖子,问题仍然存在 – 8vius

+0

您是如何修改代码的?你可以添加更新的代码到你的文章吗? – highlycaffeinated

+0

我所做的是在if语句的两种情况下设置person对象,以更正您所说的内容,这样,当我访问它的name属性时,它总是设置为 – 8vius

相关问题