我在我的代碼如下問題:EXC_BAD_ACCESS雖然對象沒有被釋放?
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;
}
我只是不知道爲什麼它只發生在第一個。
當你設置kundenTableViewController時,你是否保留它?你可能需要這樣做:[kundenTableViewController retain]在你的setter中。 – Trevor
如果第一個代碼與第一個代碼不同,那麼代碼不能完全相同...... – jtbandes
當您獲得EXC_BAD_ACCESS時,您可以發佈日誌中公佈的調試信息嗎? – Goz