我有一个从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) {
我知道按孩子排序是可能的,但我无法弄清楚如何在本地重新排序表后更新索引。
谢谢!
答案 0 :(得分:1)
我发现你还没有得到答案 - 我自己处理同样的事情,我认为我所做的事情也是你唯一的选择。
您需要首先确保在字段上排序源查询,而不是按键排序的默认值。更改密钥比使用字段更难,也可能不是您想要做的事情。在我们的应用程序中,我们添加了一个&#34; weight&#34;每个记录的字段,以及queryOrderedByChild
。任何排序键字段都可以。
完成此操作后,现在可以重新排序,并遵循大多数其他iOS案例使用的相同技术。有几种方法可以做到这一点,但如果你没有庞大的数据集,我发现最容易的方法是制作数据集的可变数组副本。如果您在表格中使用FirebaseUI
和FUIArray
,这很容易 - 只需拨打[array items]
即可为您制作该副本。
从那里,使用标准的iOS数组重新排序调用来移动数组中的项目,然后重新计算每个项目的排序键。最后,将调整后的排序键设置为Firebase。粗伪伪代码:
// Make a temp array to do the move in
NSMutableArray *temp = [[myData items] mutableCopy];
[temp removeObjectAtIndex:sourceIndexPath.row];
[temp insertObject:interest atIndex:destinationIndexPath.row];
// Renumber the items in Firebase
NSInteger sortKey = 0;
for (FIRDataSnapshot *entry in temp) {
[[entry.ref child:@"mySortKey"] setValue:@(sortKey)];
sortKey++;
}
根据您将表格连接到Firebase的方式,此时应自动更新。