2012-06-02 89 views
1

,這可能是解決一個簡單的問題,但它已經難倒我。NSRangeException上FetchedResultsController

背景: 我有一個鏈接到FetchedResultsController一個非常簡單的UITableView。基本上表格填充在FetchedResultsController每一行一行。

問題陳述: 如果我點擊我的應用程序按鈕來查看所有記錄,應用程序崩潰與錯誤

NSRangeException '原因是:' * - [_ PFBatchFaultingArray objectAtIndex:] :指數(2)超出範圍(2)

但是,如果我點擊另一個按鈕呈現屏幕添加數據,取消此屏幕,不保存任何東西,回到視圖中的所有畫面的畫面工作得很好。

我甚至用的NSLog聲明試圖調試,你可以看到下面

2012-06-01 23:37:01.345 TC[35258:fb03] sections : 1 
2012-06-01 23:37:43.154 TC[35258:fb03] rows 3 
2012-06-01 23:39:29.174 TC[35258:fb03] indexpath <NSIndexPath 0x91180f0> 2 indexes [0, 0] 
2012-06-01 23:41:29.041 TC[35258:fb03] indexpath <NSIndexPath 0x903e770> 2 indexes [0, 1] 
2012-06-01 23:41:44.015 TC[35258:fb03] indexpath <NSIndexPath 0x904afb0> 2 indexes [0, 2] 
2012-06-01 23:41:46.598 TC[35258:fb03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (2) beyond bounds (2)' 

這我困惑 - 當有明確3行,爲什麼它的第三排拋出一個錯誤?非常感謝您的幫助和見解。謝謝

+0

它就像.. fetchedResultsController中的記錄數量和你在UITableView中填充的數據中收集的記錄數量不匹配。陣列超出界限 –

+1

我明白,但我不明白爲什麼他們不匹配時,NSLog顯示FRC中有3行 – ChicagoSky

回答

0

發現問題和解決方案。這是發生了什麼事

  1. 在我的應用程序的主菜單中,我有兩個按鈕 - 一個新的項目添加到數據庫,另一個是查看所有的項目在我的數據庫
  2. 上述錯誤發生在如果我直接查看所有項目從主菜單中,但不嘗試先補充一下。
  3. 我意識到,如果我進入添加屏幕並取消添加屏幕,我仍然在ManagedObjectContext中創建一個對象,但在取消時不會刪除它。因此,系統仍然算作3排MamagedObjects的,但實際上只發現2數據庫中的承諾的。
  4. 我添加了一行取消按鈕代碼,從上下文中刪除當前的託管對象,從iOS模擬器中刪除應用程序,重新編譯並運行它 - 像魅力一樣工作。

你可能有同樣的問題 - 請嘗試以下步驟來識別,如果你的問題是類似的

  1. 從模擬器中刪除應用程序,編譯它新鮮和運行它。如果工作正常,則上下文和數據庫之間肯定存在衝突
  2. 檢查以確保您正在刪除可能已創建但未提交的託管對象。