重新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表,最后一行不会显示在“编辑”状态/视图。 我仍然试图理解和解决这个剩余的问题。