我有一个从firebase-data中解析出来的tableview,如下所示:
for snap in snapshotSetlists {
if let songsDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let song = SongModel(songKey: key, dictionary: songsDict)
self.songData.append(song)
}
}
我如何使用
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
我知道按子表排序是可能的,但我不知道如何在本地重新排序表后更新索引。
谢谢你!
1条答案
按热度按时间ncgqoxb01#
我知道你还没有得到答案--我自己也在处理同样的事情,我想我所做的也将是你唯一的选择。
首先,你需要确保源查询是按字段排序的,而不是默认的按键排序。更改键比更改字段更难,而且可能不是你想做的。在我们的应用程序中,我们为每条记录添加了一个“weight”字段,并在上面添加了
queryOrderedByChild
。任何排序键字段都可以。完成这些之后,重新排序就成为可能了,并且遵循了大多数其他iOS案例所使用的相同技术。有几种方法可以做到这一点,但是如果你没有一个巨大的数据集,我发现最简单的方法是制作数据集的可变数组副本。如果你在表中使用
FirebaseUI
和FUIArray
,这很简单-只需调用[array items]
,它将为您制作副本。在此基础上,使用标准的iOS数组重新排序调用来移动数组中的项目,然后重新计算每个项目的排序键。最后,将调整后的排序键设置到Firebase中。粗略伪代码:
根据您将表连接到Firebase的方式,它应该会在此时自动更新。