我的应用程序只使用一个managedObjectContext
,并设置为与 iCloud 同步 coredata 更改,我使用NSFetchedResultsController
它来为我的UITableView
. 当我尝试编辑(重新排序)表格单元格时会出现问题。
想象一下这个场景:
我执行[tableView setEditing:YES animated:YES];
我的手指在一行上按住,并开始在tableView
(重新排序)周围移动它。与此同时,我删除了 mac 应用程序中的一行,并保存了更改。
iOS 应用程序了解了新的更改,我fetchedResultsController
尝试调用... 并从正在编辑[tableView beginUpdates]
的行中删除该行。tableView
我不知道它是否应该以这种方式工作,但它会崩溃。
你会如何尝试解决这个问题?
日志:
***[3758:707] asynchronously added persistent store!
***[3758:707] numberOfRowsInSection:3
***[3758:707] numberOfRowsInSection:2
***[3758:707] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-1912.3/UITableView.m:1046
***[3758:707] CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (3) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). with userInfo (null)
***[3758:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 2 beyond bounds [0 .. 0]'
前两个日志在 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 方法中并记录我返回的内容。发现第一次返回3,第二次返回2!
编辑:现在我在想......它应该以这种方式工作,还是我必须找到另一种方法来实现它?当您拖动单元格并调用 [tableView moveRowAtIndexPath:toIndexPath:]; 时会发生什么 ?