EXC_BAD_ACCESS虽然没有释放对象?

时间:2011-07-03 17:49:24

标签: objective-c uiviewcontroller exc-bad-access nszombie

我的代码中存在以下问题:

    UITableViewController *controller = nil;


switch (indexPath.row) {
    case 0:
        controller = self.kundenTableViewController;
        break;
    case 1:
        controller = self.projekteTableViewController;
        break;
    case 2:
        controller = self.leistungenTableViewController;
        break;
    case 3:
        controller = self.zeitenTableViewController;
        break;
}

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

所有这四个视图控制器都在.h文件中正确定义并手动合成(是的,所有都完全一样,我仔细检查过):

- (LeistungenTableViewController*)leistungenTableViewController {
if (leistungenTableViewController == nil) {
    // Neu erzeugen
    leistungenTableViewController = [[LeistungenTableViewController alloc] initWithNibName:@"LeistungenListeView" bundle:nil];
} 
return leistungenTableViewController;

}

现在,发生了一些奇怪的事情:如果case 0:被调用,controller变为self.kundenTableViewController。然后我在最后一行得到EXC_BAD_ACCESS,视图控制器被推到堆栈上。这只发生在这个特定的控制器上,而不是其他控制器。 我尝试了NSZombies并通过NSLog检查控制器是否正确初始化,但一切似乎都很好。有什么想法吗?

更新:这是四个控制器的代码:

- (KundenTableViewController*)kundenTableViewController {
if (kundenTableViewController == nil) {
    // Neu erzeugen
    kundenTableViewController = [[KundenTableViewController alloc] initWithNibName:@"KundenListeView" bundle:nil];
} 
return kundenTableViewController;

}

- (LeistungenTableViewController*)leistungenTableViewController {
if (leistungenTableViewController == nil) {
    // Neu erzeugen
    leistungenTableViewController = [[LeistungenTableViewController alloc] initWithNibName:@"LeistungenListeView" bundle:nil];
} 
return leistungenTableViewController;

}

- (ProjekteTableViewController*)projekteTableViewController {
if (projekteTableViewController == nil) {
    // Neu erzeugen
    projekteTableViewController = [[ProjekteTableViewController alloc] initWithNibName:@"ProjekteListeView" bundle:nil];
} 
return projekteTableViewController;

}

- (ZeitenTableViewController*)zeitenTableViewController {
if (zeitenTableViewController == nil) {
    // Neu erzeugen
    zeitenTableViewController = [[ZeitenTableViewController alloc] initWithNibName:@"ZeitenListeView" bundle:nil];
} 
return zeitenTableViewController;

}

我只是想不通为什么它只发生在第一个。

1 个答案:

答案 0 :(得分:0)

听起来像nib文件的初始化出了问题,特别是一旦被调用的-loadView方法(在视图控制器显示之前发生并且负责与代理对象挂钩IBOutlets) )。您确定每个IBOutlet都已正确连接并且视图也已连接吗?你可能想检查你的笔尖。