【发布时间】:2016-04-21 15:02:50
【问题描述】:
我有一个奇怪的 NSFetchedResultsController 行为。 我想将它与我的数组(不是 tableView)一起使用。我的意思是,我的数组应该包含来自 NSFetcherResultsController 的对象列表。
我创建我的列表:
_ = try? controller.performFetch()
var myList = controller.fetchedObjects?.map { MyModel($0) }
而且它有效。但是当NSFetchedResultsController 更新时我应该更新 myList 时遇到问题。所以,我有这个方法:
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
myList.insert(anObject, atIndex: newIndexPath!.row)
case .Delete: ...
我在这条线上崩溃了。例如,如果 myList 包含 40 个元素,应该插入 20 个元素,那么newIndexPath 可以等于 53,但不能等于 41。我的意思是,插入的顺序不正确(可能是 NSFetchedResultsController 的错误)。我的意思是,NSFetchedResultsController 不是插入顺序为 41、42、43、44、45、46 等的对象,而是插入如下对象:53、56、42、58、43、46、44 等等。
使用 tableView 它正在工作,因为当调用 didChangeObject 方法时,NSFetchedResultsController 已经包含新数据(60 个元素)。但是我怎样才能得到NSFetchedResultsController 元素的镜像呢?
目前我只看到一种解决方案。我应该存储更新,当调用“controllerDidChangeContent”方法时,我应该按 indexPath 对更新进行排序并更新 myList。但可能存在更好的解决方案吗?
【问题讨论】:
-
使用
NSFetchedResultsController没有表格视图有什么好处?主要目的是驱动UI(表格视图)响应NSManagedMangedContext的变化 -
您是否需要保留
myList的现有内容,或者您可以重新创建整个列表? -
我使用带有集合结构的自定义视图。关于娱乐列表-我可以,但是如果我有很多元素,那可能需要很长时间
-
当您可以对更改做出反应并更新列表时,重新创建整个列表是一种浪费。
标签: ios swift core-data nsfetchedresultscontroller