私は私のコードでは、以下のような問題があります。オブジェクトは解放されませんが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];
すべてのこれら4つのビューコントローラが正しくの.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;
:ここでは4つのコントローラのためのコードです。
}
なぜ最初のものでしか起こらないのか分かりません。
kundenTableViewControllerを設定すると、それを保持していますか?あなたのセッターで[kundenTableViewController retain]する必要があります。 – Trevor
最初のものと何かが異なる場合、あなたのコードはまったく同じものになることはありません。 – jtbandes
EXC_BAD_ACCESSを入手したらログに掲示されたデバッグ情報を投稿できますか? – Goz