2016-11-20 100 views
0

在實施滑動刪除功能時,我遇到了以下問題: 當我刪除該項目時,數組中的最後一項佔據了它的位置。tableView和Realm數據庫之間的差異

因此,例如我有數組[1,2,3,4,5]。刪除2(索引1)後,數據庫中的數組看起來是這樣的[1,5,3,4]。但表格視圖顯示一切正確[1,3,4,5]。爲什麼這樣?我想要這樣保存Realm物品[1,3,4,5]。

下面如果功能實現:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
     if editingStyle == .Delete { 
      try! realm.write { 
       let itemToDelete = items[indexPath.row] 

       realm.delete(itemToDelete) 

      } 
      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Top) 
     } 
    } 

我真的很感謝您的幫助!

+0

如果表格視圖中的項目顯示正確(「1,3,4,5」),您如何知道它們被錯誤地存儲在領域?我試圖重現你的行爲,但我不能。如果您可以爲您的問題添加更多代碼,包括您的Realm模型如何設置以及您的表視圖如何使用這些模型,那就太好了。謝謝! – AustinZ

+0

@AustinZ我使用Realm Browser來查看數據庫的行爲。感謝下面的答案,我看到我的排序問題。 – Robert

回答

2

既然您使用的是realm.delete而不是myList.remove,我假定itemToDelete是一個獨立的對象,而不是Realm List中的實例。領域列表中的項目順序是有保證的,但不能用於檢索對象。因此,如果您僅使用realm.objects,則無法保證序列,除非您應用自己的過濾器。

我假設你正在使用Realm瀏覽器並期望序列匹配,但它不會。

+0

謝謝!我意識到我需要使用列表或排序我的結果。 – Robert

3

請注意,Results不保證能夠保留插入順序。出於性能方面的原因,可能會重新排序項目以保持Realm文件較小,或保持操作速度更快。

List屬性保證保留它們的插入順序。

如果您需要Results的穩定訂購,請確保對其進行分類。

這包含在Realm的文檔sorting中。

+0

謝謝!現在我看到了結果和列表之間的區別,以及爲什麼我有這種排序問題。 – Robert