0

我有一個TableView控制器類,它使用提取的結果控制器來顯示從核心數據模型中獲取的「患者」實體列表。該表的各個部分取自一個名爲「位置」的患者屬性。下面是提取請求的排序描述:嚴重的應用程序錯誤

NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES]; 
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil]; 

下面是FRC的初始化代碼:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:@"List"]; 

當我想添加一個新的「病人」實體 - 我點擊添加按鈕然後將「添加新患者」視圖控制器推送到導航堆棧。

我加的第一個病人工作正常。

如果我添加了第二個病人 - 應用程序有時會出現以下錯誤崩潰:

2010-03-22 14:42:05.270 Patients[1126:207] Serious application error. Exception was caught during Core Data change processing: * -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1) with userInfo (null) 2010-03-22 14:42:05.272 Patients[1126:207] * Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1)'

這似乎只如果患者的增加了一個位置發生(如果未添加該位置,然後默認爲'未知')。這似乎也與排序的位置有關。例如,如果第一個患者位置=病房14,第二病房= 9,那麼它肯定崩潰。

我想知道如果這是怎麼回事,我要求獲取的結果控制器排序節名?

這個錯誤是驅使我堅果,我只是無法弄清楚。任何幫助將不勝感激!

回答

3

這似乎是蘋果代碼中的一個錯誤。使用this SafeFetchedResultsController子類,我取得了一些成功。

+0

這解決了我的問題! – 2013-01-09 13:21:51

+0

這仍然需要在iOS 8? – SAHM 2014-10-07 15:46:04

1

在使用NSFetchedResultsController時,任何時候當看到消息「核心數據更改處理期間發生異常」時,都應立即開始查看NSFetchedResultsControllerDelegate方法。我建議在控制器的開頭設置一個斷點:didChangeObject:atIndexPath:forChangeType:newIndexPath方法。然後逐步通過此方法並觀察崩潰發生的位置。問題可能是您沒有在此方法中正確管理您的部分插入和刪除。

相關問題