节目接收信号:EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】节目接收信号:EXC_BAD_ACCESS【英文标题】:Program received signal: EXC_BAD_ACCESS 【发布时间】:2011-07-07 19:51:24 【问题描述】:

我的 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 中,当它被调用时,我得到它在调试时说的错误,如果我不调试它会运行的行方法和加载没有问题。如果我根本不调试,它将不会调用该方法。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我修改了代码并更新了帖子,问题依旧 你是怎么修改代码的?您可以将更新后的代码添加到您的帖子中吗? 我所做的是在 if 语句的两种情况下都设置了 person 对象,以纠正你所说的,这样当我访问它的 name 属性时,它总是被设置为某个东西

以上是关于节目接收信号:EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

节目接收信号:“0”。数据格式化程序暂时不可用

卫星电视接收机。双模机和单模机有啥取别

卫星接收器参数是啥

能接收中星九号卫星的小锅和高频头还能接收哪颗卫星的电视节目

把小卫星锅里的极化片拿掉可以多收台吗

卫星接收机种只有左旋和右旋。。怎么接收水平和垂直极化方式的信号?