【发布时间】:2017-02-25 22:45:36
【问题描述】:
我正在使用 NSFetchedResultsController。我找不到任何针对Swift 3 的简单教程。
这就是我到目前为止所做的。我已经使用从核心数据中获取插入数据的NSFetchedResultsController 成功填充了我的表。我在我的核心数据模型中创建了一个名为orderPosition 的属性,它被声明为Int32。关于在插入时将数据添加和保存到核心数据,我没有对这个属性做任何事情。
在我初始化NSFetchedResultsController 的提取func 中,我修改了排序描述符以包含以下代码:
let sortDescriptor = NSSortDescriptor(key: "orderPosition", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
然后我实现了tableView func:
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
attemptFetch()
var objects = self.controller.fetchedObjects!
self.controller.delegate = nil
let object = objects[sourceIndexPath.row]
objects.remove(at: sourceIndexPath.row)
objects.insert(object, at: destinationIndexPath.row)
var i = 0
for object in objects {
object.setValue(i += 1, forKey: "orderPosition")
}
appdel.saveContext()
self.controller.delegate = self
}
在didChange anObject 函数的实现中,我包含了.insert、.delete、.update 和.move 的开关盒。
我的.move 案例如下所示:
case.move:
if let indexPath = indexPath {
tableView.deleteRows(at: [indexPath], with: .fade)
}
if let indexPath = newIndexPath {
tableView.insertRows(at: [indexPath], with: .fade)
}
break
请帮我解决这个问题。我花了数周时间试图理解这一点。我已经经历了很多(如果不是全部的话)堆栈溢出问题。我从一个中实现了一些循环想法,因为我有一个类似的思考过程来解决这个问题,但它不起作用。我遇到的没有 Swift 3 核心数据教程/视频可以真正帮助我很好地解决和理解这个问题。我不想就此放弃。
【问题讨论】:
-
我收回了标志,不幸的是我没有在 Swift 中编码。然而,这可能是一个过时的教程,但也许你可以从中得到提示,除非除了我之前提供的重复链接之外,没有人为你提供解决方案。 iosnomad.com/blog/2014/8/6/…
-
谢谢,我去看看。这很令人沮丧,但我决心用这个来解决这个问题。
-
@JoséNeto 我想实现表格视图重新排序,我可以在其中单击编辑、移动单元格、单击完成并让它保存新订单并保留我的核心数据模型。任何帮助表示赞赏。
-
@Sneak 谢谢你的链接。我已经多次阅读这个“......诡计”教程,试图理解它。不幸的是,它确实很先进。
-
@Sneak 你和我有相似的学习方法。我总是试图打破一个项目以获得更深入的理解。别担心,我还没有放弃这样做。在我打字的时候,我把它打开了,我正在尝试过去哈哈再次感谢,我真的很感谢你能帮我解决这个问题。
标签: ios swift uitableview core-data swift3