1

HDLogOnViewController 在 HDLogOnViewController 的 tableview:didSelectRowAtIndexPath 方法中将两个变量传递给 HDDomicileViewController。

在 HDDomicileViewController 的 viewDidLoad 方法之后,应用程序崩溃并出现 EXC BAD ACCESS 错误。变量在 HDDomicileViewController 中验证正确。

我在没有帮助的情况下启用了僵尸。当我启用 Guard Malloc 时,应用程序运行正常。在 XCode 的输出视图中,没有指示是什么导致了错误。我在这里研究了许多 EXC BAD ACCESS 线程,并尝试使用属性而不是实例变量。我使用了四个 if 语句而不是 if else if。执行此操作时,应用程序将仅使用一个 if 语句正常运行,但会因多个 if 语句而崩溃。此外,使用四个 if 语句,我可以注释掉每个语句,它会崩溃,看起来问题出在 if 条件中。

如何发现导致错误的原因?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *cellLabel = [NSString stringWithString:[[[HDLogOnStore sharedStore] cellTitleLabels] objectAtIndex:[indexPath row]]];

if ([cellLabel isEqualToString:@"Domicile"]) {

    tableViewArray = [[HDLogOnStore sharedStore] domiciles];
    tableViewArrayName = @"domiciles";

    NSLog(@"indexPath row is %i", [indexPath row]);
    NSLog(@"array name is %@", [[[HDLogOnStore sharedStore] cellTitleLabels] objectAtIndex:[indexPath row]]);
}

else if  ([cellLabel isEqualToString:@"Position"]) {

    tableViewArray = [[HDLogOnStore sharedStore] positions];
    tableViewArrayName = @"positions";

    NSLog(@"indexPath row is %i", [indexPath row]);
    NSLog(@"array name is %@", [[[HDLogOnStore sharedStore] cellTitleLabels] objectAtIndex:[indexPath row]]);
}

 else if ([cellLabel isEqualToString:@"BidRound"]) {

    tableViewArray = [[HDLogOnStore sharedStore] bidRounds];
    tableViewArrayName = @"bidRounds";

    NSLog(@"indexPath row is %i", [indexPath row]);
    NSLog(@"array name is %@", [[[HDLogOnStore sharedStore] cellTitleLabels] objectAtIndex:[indexPath row]]);
}

else if ([cellLabel isEqualToString:@"Month"]) {

    tableViewArray = [[HDLogOnStore sharedStore] months];
    tableViewArrayName = @"months";

    NSLog(@"indexPath row is %i", [indexPath row]);
    NSLog(@"array name is %@", [[[HDLogOnStore sharedStore] cellTitleLabels] objectAtIndex:[indexPath row]]);
}

HDDomicileViewController *domicileViewController = [[HDDomicileViewController alloc]init];
[domicileViewController setSelectedArray:tableViewArray];
[domicileViewController setSelectedArrayName:tableViewArrayName];

[self.navigationController pushViewController:domicileViewController animated:YES];

}

4

1 回答 1

0

我开始出现不一致的行为,所以我回到这里阅读更多帖子。

我按照建议解决了这个问题,以纠正在分析项目后发现的所有错误。我更正了一些看似无关的错误,例如“在初始化期间存储到‘配对’的值永远不会被读取”。我不确定这是否直接解决了问题,但在过程中的某个地方问题消失了。

供参考

该应用程序在 viewDidLoad 方法之后和 viewWillAppear 方法之前崩溃。一步一步的调试使我得到了我一无所知的机器代码。

- (void)viewDidLoad
{
   [super viewDidLoad];

   NSLog(@"selectedArray count is %i",[selectedArray count]);
   NSLog(@"selectedArray name is %@",selectedArrayName);
   NSLog(@"checkedRowMonth is %i",[[HDLogOnStore sharedStore]checkedRowMonth]);

}

- (void) viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
}
于 2013-01-27T16:35:11.143 回答