2013-09-26 62 views
0

我有一個類似Notes的應用程序:UITableViewController通過將它們推送到導航堆棧上來顯示各個註釋。ios7導航欄導致EXC_BAD_ACCESS在VC顯示鍵盤後退出

的問題出現時,我有UITextView與FirstResponder狀態(鍵盤顯示)和我觸摸後退按鈕。當前的視圖控制器與預期的動畫一樣被解散,但是導航欄現在被破壞了!如果我按任何一個欄按鈕,它將導致EXC_BAD_ACCESS。

我會說它沒有正確過渡。表格VC也以某種方式被打破,因爲它可能在進一步的操作中顯示爲空......非常奇怪的行爲!

順便說一下,它並沒有導致iOS5和iOS6的任何問題,但在那裏我使用了自定義V形背部按鈕。

我檢查了標準的Notes應用程序,它的作用就像一個魅力。 有什麼竅門?

非常感謝您的建議!

+0

請考慮發佈一些代碼以及崩潰日誌。 – null

+0

經過一些跟蹤之後,我發現UITableViewController的viewWillAppear:和viewDidAppear:方法在使用活動鍵盤迴到它之後不會觸發。爲什麼會這樣? –

+0

毫米,確實設置了導航控制器代理? – null

回答

0

我得到了它,並會盡量解釋,以幫助別人來拯救他們的一天......

EXC_BAD_ACCESS有人提出,因爲UITableViewController沒有正確返回彈出動畫過程中轉變爲(其viewWillAppear:viewDidAppear:方法不根本觸發)。 反過來,由於popViewControllerAnimated:被調用了兩次或更多次,動畫未正確執行:1)作爲系統後退按鈕回調的一部分; 2)在textViewDidEndEditing:之內,以防輸入文本。

解決的辦法是檢查是否後退按鈕具有呼叫popViewControllerAnimated:之前被按下。訣竅是檢查detail-view控制器是否仍在導航堆棧中。 這裏是輔助方法:在iOS7

-(void) returnToTheListOfRecords { 
    self.textView.delegate = nil; // this is to avoid the second call of `textViewDidEndEditing:` 
    if ([self.navigationController.viewControllers indexOfObject:self.delegate]==NSNotFound) { 
     // Back button has been pressed. 
    } else { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

發生該問題不僅是因爲它全新的動畫。

0

EXC_BAD_ACCESS表示您試圖訪問已被釋放的對象。你可以做的最好的事情來追蹤這是NSZombie,它會告訴你什麼發佈的對象正在發送一條消息(又名EXC_BAD_ACCESS)。

你可以從here得到如何啓用它。

+0

我明白爲什麼會引發EXC_BAD_ACCESS並導致它,正如我在前面評論中所說的。 'popViewControllerAnimated:'被調用兩次(從系統和'textViewDidEndEditing:'返回按鈕)。我只是不知道如何正確處理它,如何檢查後退按鈕動畫是否正在進行中... –

+0

嘗試[textView resignFirstResponder];在viewWillDisapear中,如果沒有任何事情發生,請編輯您的問題併發布您的代碼。 – null

+0

不幸的是,它沒有幫助。但我找到了解決方案!我會回答我的問題。非常感謝您的建議。 –