2010-09-10 14 views
0

也許我一直在尋找這個太久;)我的應用程序有一個NavigationController和幾個ViewControllers。從ViewController的兩個級別downView(mainViewController),從rootViewController加載,我有下面的代碼。在PushViewController到dataViewController後面(例如按下按鈕)後,應用程序崩潰。當使用Init,PushViewController,Release時奇怪的Exc錯誤訪問。這段代碼有什麼問題?

dataViewController加載得很好,但是當輕擊navigationController的後退按鈕時,應用程序會與對象異常一起崩潰。如果我刪除:

[dataViewController release]; 

該應用程序工作正常。這很奇怪,因爲dataViewController是以相同的方法初始化的。 任何想法?

- (void) locationPage 
{ 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyRemoveMap" object:nil]; 
    MyAppDelegate *app = [[UIApplication sharedApplication] delegate]; 

    UINavigationController *navigation = app.navigationCantroller; 
    [navigation popToRootViewControllerAnimated:NO]; 

    DataViewController *dataViewController = [[DataViewController alloc] initWithNibName:@"DataView" bundle:nil]; 
    [dataViewController setCategoryId:category]; 

    MyLanguage *lang = app.lang; 
    Mylocation *location = [lang locationForCategoryId:category]; 

    dataViewController.title = location.name; 
    NSArray *locationArray = [lang locations]; 

    dataViewController.locations = locationArray; 
    [navigation pushViewController:dataViewController animated:YES]; 
    [dataViewController release]; // With this removed, app doesn't crash 
} 

回答

2

甚至沒有閱讀您的文章。如果是Exec-Bad-Access,我有2個詞給你:

啓用NSZombies。

請點擊此鏈接:(它解釋了你需要知道的修復任何壞的訪問問題的一切)

Phone Memory Debug with NSZombie and Instruments

乾杯!

+0

賓果! Lupu1001,你的回答挽救了我的生命! ;) 我喜歡你!!! – Jordan 2010-09-11 04:45:17

+0

很高興我能幫到你。回頭見。 – 2010-09-12 23:56:49

1

這個問題可能出現在dataViewController被彈出並且你試圖訪問它的東西時 - 它已經被釋放了。您可以查看控制檯瞭解更多細節 - 更好的是,以調試模式運行(調試配置與調試器一起運行)。

您可以編輯您的問題以顯示與後退按鈕一起運行的一些代碼。

+0

沒有記錄到控制檯。剛崩潰。 Xcode 3.2.3,3.2.4,iOS 3.1。逐步調試器不會顯示任何內容。有趣的評論,但我的理解是,pushViewController保留dataViewController,直到後退按鈕被擊中。 – Jordan 2010-09-10 22:19:01

+0

它確實保留,但第二個彈出它被釋放。所以當你想從它讀取一些數據時,你最好保留它。 – Eiko 2010-09-10 23:00:29

0

你說的是釋放dataViewController,但你的代碼是detailsViewController。你是否複製並粘貼不正確,或者是錯誤?

您應該考慮不要使用app.navigationController而是self.navigationController。清潔設計。對應用程序委託的依賴性較小,常常被用作知道太多的frankenstein對象。

+0

編輯:應該是dataViewController。謝謝。仍然是一個問題。 – Jordan 2010-09-10 22:07:49

+0

當我使用self.navigationController時,PushViewController不會被加載。剛進入根目錄 - [navigation popToRootViewControllerAnimated:NO]; – Jordan 2010-09-10 22:21:53