2016-07-17 2 views
2

はここに私のセットアップませんがありますにもかかわらず、変更を報告します。データは、後でRealm DBに追加される領域オブジェクトに解析されます。結果に何らかの変更が生じた場合に通知する通知ブロックをセットアップしました。さて、フェッチされたオブジェクトが既にDBに書き込まれたオブジェクトと同一であっても、RealmCollectionChangeは、すべてのオブジェクトが変更されたかのようにレポートします。RealmCollectionChangeはどれも

フェッチ/解析:

realmDB.beginWrite() 

for projectJSON in projectsArray { 
    let project = createObjectFromJson(projectJSON) 
    realmDB.add(project, update: true) 
} 

realmDB.commitWrite() 

変更オブザーバー:ここでは、サンプルコードです

notificationToken = projects.addNotificationBlock { changes in 
switch changes { 
case .Update(_, let deletions, let insertions, let modifications): 
    ... 
} 

だからここにすべてのオブジェクトが更新されているかのように、変更は常に、インデックスの完全なリストを返します。

これは期待ですか?そのような行動を避ける方法はありますか? add:updateは、オブジェクトが同じであれば更新をスキップするのではなく、更新を強制します。

答えて

1

あなたのcreateObjectFromJsonメソッドでは、オブジェクトプロパティが変更されているかどうかにかかわらず、ほぼ確実にオブジェクトプロパティを設定しています。残念ながら、プロパティの設定は、値が同じであっても変更として検出されます。私はこれが意図された動作であるかどうかはわかりませんが、これを回避する方法の1つは、新しい値が古い値と等しくない場合にのみプロパティを設定することです。

+0

これは正しいです。同じ値であってもプロパティを変更すると、通知の変更として登録されます。これは、オブジェクトが書き込みトランザクションによって接触されたときにUIが常に更新されるようにするためです。これがアプリケーションの実装と衝突する特定のユースケースがある場合は、Realm Cocoaレポで問題を提出してください:https://github.com/realm/realm-cocoa/issues – TiM

関連する問題