2016-08-01 250 views
0

我从火力点数据分析,像这样一个实现代码如下:火力地堡(SWIFT)重新排序表

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

我看到你还没有得到答案 - 我正在处理同样的事情,我认为我正在做的事情将是你唯一的选择。

您需要首先确保源查询是按字段排序的,而不是按键排序的默认值。改变键比字段更难,也可能不是你想要做的。在我们的应用程序中,我们为每条记录添加了一个“权重”字段,并在其上添加了queryOrderedByChild。任何排序键字段都可以。

完成此操作后,现在可以重新排序,并遵循大多数其他iOS应用程序使用的相同技术。有几种方法可以做到这一点,但是如果您没有庞大的数据集,我发现最简单的方法是制作数据集的可变数组副本。如果您的桌子使用FirebaseUIFUIArray,这很容易 - 只需拨打[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的方式,它应该在此时自动更新。