2011-07-10 62 views
2

我已經創建與下列爲什麼從ModalView返回後UITableView失去了ManagedObjectContext?

  • 一個TableViewController基於窗口的應用程序(如果沒有XIB文件)
  • 一個視圖控制器(採用XIB文件)< - 被用作模態的視圖
  • 一個CoreData模型來存儲一些數據

我設法從實體的數據加載應用程序並填充的TableView,我能夠通過所有的TableView中的細胞的滾動,沒有任何問題。

我添加了一個UIBarButton項(rightBarButton),它使用戶輸入一些數據時會出現一個模態視圖。模型視圖有一個SAVE和CANCEL按鈕。

問題是一旦我按下取消按鈕,我回到TableView,但如果我嘗試滾動throgh tableview中的項目,應用程序崩潰。

經過4個小時搜索Google和StackOverflow後,我無法明白爲什麼我的應用程序崩潰。然而,我沒有注意到調試器將ManagedObjectContext設置爲NIL,這是我第二次滾動tableview(在modalview關閉後),儘管沒有更改數據並且沒有插入/刪除。

我試着用一個定時器來調用reloadData,因爲我在StackOverflow上發現了一些答案,但那沒有奏效。我嘗試將ManagedObjectContext設置爲一個帶有retain的屬性,並刪除了[myManagedObjectContext發佈]的所有事件,以避免在需要時提前發佈它,但這沒有幫助。

看來我正在做一個明顯的錯誤,但我不知道在哪裏。

請幫忙。

+1

你是否實現了'viewDidUnload'和/或'didRecieveMemoryWarning',如果是的話,你是否設置了'self.managedObjectContext = nil;'在它們中的任何一點? –

+0

我實現了didUnload,但我沒有設置managedobjectcontext =零,這會導致另一個問題 – Ahmad

+0

@ Paul.s你是對的,我沒有故意設置管理對象上下文爲零,這是我明顯的錯誤。如果你可以發佈答案,我會接受它。謝謝。 – Ahmad

回答

3

ivars不會因爲它們被釋放到其他地方(至少不在iOS 4.3中)而成爲nil。所以過度釋放並不是myManagedObjectContext變爲nil的具體原因。假設您使用訪問器來引用您的ivars(並且您應該是),請執行setManagedObjectContext:並在其中放置一個斷點以查看是誰調用它。或者,您可以將gdb觀察點添加到myManagedObjectContext以查看內存何時更改。

當你崩潰時,你沒有指出崩潰堆棧是什麼。你應該專注於你在崩潰時訪問什麼內存,並確保崩潰是由於內存違例而不是異常。檢查你的調試器輸出。通常它會告訴你發生了什麼事。

相關問題