2011-07-03 11 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]; 

すべてのこれら4つのビューコントローラが正しくの.hファイルで定義されており、手動で合成される(はい、すべてが全く同じで、私はダブルチェックを) :

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

}

は今、奇妙な何かが起こる:case 0:が呼び出された場合、controllerself.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つのコントローラのためのコードです。

}

なぜ最初のものでしか起こらないのか分かりません。

+0

kundenTableViewControllerを設定すると、それを保持していますか?あなたのセッターで[kundenTableViewController retain]する必要があります。 – Trevor

+0

最初のものと何かが異なる場合、あなたのコードはまったく同じものになることはありません。 – jtbandes

+1

EXC_BAD_ACCESSを入手したらログに掲示されたデバッグ情報を投稿できますか? – Goz

答えて

0

nibファイルの初期化では、特に-loadViewというメソッド(ビューコントローラが表示される直前に発生し、IBOutletをプロキシオブジェクトに接続する)が問題になります。すべてのIBOutletが正しく接続されており、ビューも接続されていますか?あなたはペン先をチェックしたいかもしれません。

+0

問題が見つかりました。私のKundenTableViewControllerクラスでは、以前は保持されていなかったNSErrorオブジェクトを解放していました。ご助力ありがとうございます! – Peter

関連する問題