2016-12-17 17 views
0

enter image description hereなぜrealmデータベースのプロパティ値は変更されませんか?

上記のように、インデックスはシーケンスで1つ増加します。 3のようなインデックス(0を除く)の1つを削除すると、すべてのインデックスが0〜5の順番で表示されることを意味します。1 & 2は変更されず、4は3に減少、5> 5。以下の私のコードです:

let defaultRealm = try! Realm() 
let currentRealm = self.defaultRealm.objects(CurrentRealmObject.self) 

let remainedItems = currentRealm.filter("index > \(indexPath.row)") 

for item in remainedItems { 
    var realmIndex = item.index 
    print("before \(realmIndex)") 

    try! self.defaultRealm.write { 
     realmIndex -= 1 
     print("update \(realmIndex)") 
    } 
} 

私はインデックス3を削除した後、レルムデータベースは、以下になる: enter image description here

、コンソールに印刷している:

before 6 
update 5 
before 4 
update 3 
before 5 
update 4 

を参照してください?値は実際には更新されますが、領域データベースは変更されずにそのままの状態に保たれ、そのシーケンスは混乱します(なぜ同じ理由でそれらを同じ順序に保つか?

ありがとうございました!

答えて

1

var realmIndex = item.indexは、item.indexrealmIndexにコピーされたことを意味します。何回コピーした値を変更しても元のオブジェクトには影響しません。レルムの値を更新するには、それを再度割り当てるか、コピーした値ではなくプロパティを直接操作します。

  1. 再びシーケンスについては

    try! self.defaultRealm.write { 
        realmIndex -= 1 
        item.index = realmIndex 
    } 
    
  2. プロパティを直接操作する

    try! self.defaultRealm.write { 
        item.index -= 1 
    } 
    

それを割り当てて、他のデータベースと同様に、レルムは順序を保持しません。結果を順番に取得するには、sorted()メソッドを使用して明示的にソートする必要があります。または、代わりにRealmのList<T>を使用してください。 List<T>は注文を保持します。

+0

ありがとうございます!最初の問題が解決しました。あなたはオブジェクトのシーケンスを修正する方法を知っていますか?上のように、0,1,2,3,4,5,6、インデックス3を削除すると、シーケンスは0,1,2,4,5,6になりますが、0,1,2,6にはなりません、4,5、私はインデックスをpageControllerのページとして参照する必要があります、シーケンスの奇妙な変更は、ページを混乱させるでしょう。 – stephen

+0

@steve シーケンスの場合、他のデータベースと同じように、レルムは順序を保持しません。結果を順番に取得したい場合は、 'sorted()'メソッドを使って明示的にソートする必要があります。または、Realmの 'List 'を代わりに使用してください。 'List 'は注文を維持します。私は自分の答えを編集しました。 –

関連する問題