重新sortingUITableViewController中的行后,UI更新不正确

所以我重新sorting表中的行,UI结果是不正确的。 情况如下:

表格内容原来是:

a b c d e 

如果我将第0行(当前a )移动到第4行(当前e ),我看到的最终结果是:

 c d e a a 

一点点的背景:

该表正在读取Realm对象的列表。 我确认Realm对象也正确更新。 如果我在重新sorting行之后放置了一个tableView.reloadData() ,我可以得到正确的UI结果。 但是,重新加载数据会为我的应用程序带来不必要的UIanimation。 以下是我的代码执行重新sorting:

 let realm = try! Realm() realm.beginWrite() let itemToMove = self.itemList?[fromIndexPath.row] self.itemList?.remove(at: fromIndexPath.row) self.itemList?.insert(itemToMove!, at: toIndexPath.row) try realm.commitWrite() 

我有成功的经验,重新sorting不读Realm对象的表中的行。 所以我不确定这是否与Realm有关。 我研究了很多,但没有看到类似的问题。 任何帮助将不胜感激!

所以Realm对象作为表视图数据源的棘手之处在于,我需要在发生重新sorting时协调Realm对象的更新( 通知通知令牌)以及表视图。

从官方的Realm Swift文档中,logging了一个function,使用commitWrite(withoutNotifying: [token])更新Realm对象。 我挣扎了一下,直到我发现这是最近发布的一个新function,我的Realm版本有点过时了。 这就是为什么当我input该函数时,Xcode抱怨。 安装Realm 2.2.0之后,function就显示出来了。

下面是我重新sorting行的代码:

 do { self.itemList?.realm?.beginWrite() self.itemList?.move(from: fromIndexPath.row, to: toIndexPath.row) self.tableView.moveRow(at: fromIndexPath, to: toIndexPath) try self.itemList?.realm?.commitWrite(withoutNotifying: [self.notificationToken]) } catch let error as NSError { fatalError(error.localizedDescription) } 

这个问题的一些后续问题:
表格视图中奇数行的背景颜色最初设置为灰色(只是一些UIfunction)。 但是,被移动的行的背景颜色在重新sorting后不会被更新。 我试着tableView.reloadData()tableView.reloadRows() 。 但是最后一排以不可思议的状态结束,无法再编辑。 所以基本上如果我想重新sorting表,最后一行不会显示在“编辑”状态/视图。 我仍然试图理解和解决这个剩余的问题。