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