我正在使用Realm並嘗試在我的TableView中重新排序單元格。行爲,我覺得奇怪的是,它的工作原理有時酷似我希望(它正確地更新領域中的數據),但有時當它擊中行:Realm.write正在被跳過
myRealm.write {
使它不會將該塊中去。使用斷點我可以看到它跳過整個塊並直接跳到這個塊的末尾。正因爲如此,儘管它給出了tableView已被重新排序的視覺外觀,但它並未在Realm中重新排序。
我應該注意到,我在Realm的一個表中使用一個叫做order的列作爲存儲順序的一種手段。此外,標籤是從表的境界,我想訂購
override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
//update when you move a row up
if sourceIndexPath.row > destinationIndexPath.row {
let lowerbound = destinationIndexPath.row
let upperbound = sourceIndexPath.row
do{
let myRealm = try Realm()
myRealm.write {
let labelAtSource = self.labels![upperbound]
labelAtSource.order = lowerbound
for i in lowerbound...upperbound-1{
let label = self.labels![i]
label.order = i+1
}
}
}catch { }
}else{ //when you move a row down
let lowerbound = sourceIndexPath.row
let upperbound = destinationIndexPath.row
do{
let myRealm = try Realm()
myRealm.write {
let labelAtSource = self.labels![lowerbound]
labelAtSource.order = upperbound
for i in lowerbound+1...upperbound{
let label = self.labels![i]
label.order = i-1
}
}
}catch { }
}
}
您在寫電話之前正在嘗試使用。也許它失敗了,所以它不再執行寫操作。在catch塊中寫一個日誌,看它是否進入。 – pteofil
它將通過try並且無法運行myRealm.write塊,我做了一個gif向您展示當我在try上放置斷點時會發生什麼。 https://i.imgur.com/pqT6a4B.gif – dmathewwws
我不知道這是爲什麼,但我相信你的領域不能初始化,所以調用一個無塊對象的寫塊,只是忽略它。在嘗試寫入之前,能否檢查是否獲得有效的領域對象? – pteofil