【发布时间】:2018-08-17 13:59:35
【问题描述】:
我通过编写一个单一的表格应用程序视图来学习 Swift,该视图在启动时列出了核心数据表(实体)的内容。然后用户可以重新排序表视图中的行。
我需要能够保存新排序的行,以便它们替换以前的数据库表,这样当用户再次启动应用程序时,会显示新的顺序。
编辑(重新排序)功能通过长按和调用激活
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
self.projectTableView.moveRow(at: sourceIndexPath, to: destinationIndexPath)
}
第二次长按会停用编辑功能:
// Called when long press occurred
@objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer){
if gestureRecognizer.state == .ended {
let touchPoint = gestureRecognizer.location(in: self.projectTableView)
if let indexPath = projectTableView.indexPathForRow(at: touchPoint) {
if self.projectTableView.isEditing == true {
self.projectTableView.isEditing = false
db.updateAll() //this is a stub
} else {
self.projectTableView.isEditing = true
}
}
}
}
上面'handleLongPress'中对db.updateAll()的调用只是一个空白,我不知道如何更新数据库。有没有办法将新序列中tableView的内容读入数组,然后替换db中的表?感觉有点“蛮力”,但看不到任何其他解决方案。
【问题讨论】:
-
也许在调用
moveRowAt时更新您的数据源(通过删除并重新插入项目)会更好? -
@Sylvan 可以添加代码示例吗?
-
Core Data 中的记录是无序存储的。如果你想要一个特定的顺序,你必须添加一个
index属性并获取按index排序的数据。在moveRowAt中,您必须调整索引。只是移动行永远不会影响核心数据堆栈。 -
@vadian CoreData 是否有一个可以实现和获取的“id autoincrement”或类似的整数?很惊讶这样一个微不足道的(在 SQLite 中)函数在 CoreData 中不容易访问。
标签: swift uitableview core-data