2011-07-03 119 views
0

我在我的代碼如下問題: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; 

}

我只是不知道爲什麼它只發生在第一個。

+0

當你設置kundenTableViewController時,你是否保留它?你可能需要這樣做:[kundenTableViewController retain]在你的setter中。 – Trevor

+0

如果第一個代碼與第一個代碼不同,那麼代碼不能完全相同...... – jtbandes

+1

當您獲得EXC_BAD_ACCESS時,您可以發佈日誌中公佈的調試信息嗎? – Goz

回答

0

聽起來像是初始化文件的初始化出了問題,特別是一旦被調用的方法(在視圖控制器顯示之前發生並且負責將IBOutlets與代理對象連接起來)調用-loadView。您確定每個IBOutlet都已正確連接並且視圖已連接嗎?你可能想檢查你的筆尖。

+0

我發現了這個問題。在我的KundenTableViewController類中,我發佈了一個以前沒有保留的NSError對象。非常感謝您的幫助! – Peter

相關問題