ios - 程序收到信号 : EXC_BAD_ACCESS

标签 ios core-data uitableview

我的 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];
}

我在我的 AppDelegate 的 didFinishLaunchingWithOptions 方法中调用它,该方法也在同一个 AppDelegate 中,当它被调用时,我在调试时得到它说的错误,如果我不调试该行,它将运行方法和加载没有问题。如果我根本不调试,它就不会调用该方法。

编辑:根据答案更改了代码,问题仍然存在,如果我只是运行什么也没有发生,但在调试时出现错误。当我调试整个方法时,没有显示任何错误。

最佳答案

您对 NSLog 的调用试图访问您的 person 变量的 name 属性。然而,当你声明你的 person 变量时,你没有初始化它,所以它指向垃圾。你只在你的 else 子句中给它一个有效值,所以有时你的 NSLog 正在访问一个未初始化的对象。

关于ios - 程序收到信号 : EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616273/

相关文章:

ios - 防止 VoiceOver 导航 UICollectionView 的其他页面

iphone - iOS 上的 USB 文件传输

ios - 更改从代码初始化的 View Controller 时如何修复消失的选项卡栏 Controller

swift - 删除 UITableViewCell 上不需要的左缩进

ios - 如何在 XCUI 测试自动化框架中组织和分组测试用例

cocoa - 我应该为此使用 NSViewController 吗?

iphone - 核心数据删除对象 : not working?

ios - 在两个应用程序中使用一个 xcdatamodelId

iphone - 如何将 uitableview 选择与 indexpath 值居中

iphone - 如何在单行中管理多个标签但没有。表格 View 中的单元格取决于 iPhone SDK 中的数组。