web-dev-qa-db-ja.com

特定のレルムオブジェクトからすべてのデータを削除Swift

質問に深く入り込む前に。私の目標は、回答に影響を与える可能性がありますが、クラウドに存在しなくなった場合にObjectデータを削除することです。

したがって、配列がある場合は_["one", "two", "three"]_

次に、私のサーバーで_"two"_を削除します

私の領域で変更を更新してほしい。

これを行う最良の方法は、特定のObjectのすべてのデータを削除してから、my REST APIを呼び出して新しいデータをダウンロードすることです。より良い方法がある場合は、私にお知らせください。

さて、ここに私の問題があります。

オブジェクトがありますNotifications()

REST APIが呼び出されるたびに、ダウンロードする前に、これを実行しています:

_let realm = Realm()
let notifications = Notifications()
realm.beginWrite()
realm.delete(notifications)
realm.commitWrite()
_

実行後にこのエラーが発生します:_Can only delete an object from the Realm it belongs to._

だから私はこのようなものを試しました:

_for notification in notifications {
    realm.delete(notification)
}
realm.commitWrite()
_

Xcode内で発生するエラーは次のとおりです:_"Type Notifications does not conform to protocol 'SequenceType'_

ここからどこに行くべきか本当にわからない。

領域を理解しようとしています。まったく新しい

注:realm.deleteAll()は機能しますが、すべてのレルムを削除したくありません。特定のObjects

14
YichenBman

あなたはこれを探しています:

let realm = Realm()
let deletedValue = "two"
realm.write {
  let deletedNotifications = realm.objects(Notifications).filter("value == %@", deletedValue)
  realm.delete(deletedNotifications)
}

またはおそらくこれ:

let realm = Realm()
let serverValues = ["one", "three"]
realm.write {
  realm.delete(realm.objects(Notifications)) // deletes all 'Notifications' objects from the realm
  for value in serverValues {
    let notification = Notifications()
    notification.value = value
    realm.add(notification)
  }
}

理想的には、Notificationsに主キーを設定して、すべてのローカルオブジェクトを単純にすべて(またはほぼ)再作成するという極端なアプローチを取るのではなく、既存のオブジェクトを更新できるようにします。

26
jpsim