Удалить все данные из определенного объекта Realm Swift

Прежде чем зайти слишком далеко в мой вопрос. Моя цель, которая может повлиять на ваши ответы, заключается в удалении данных Object, если она больше не находится в облаке.

Итак, если у меня есть массив ["one", "two", "three"]

Затем на моем сервере я удаляю "two"

Я хочу, чтобы мое царство обновило изменения.

Я считаю, что лучший способ сделать это - удалить все данные в конкретном Object, а затем вызвать мой 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

Ответ 1

Вы ищете следующее:

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, чтобы вы могли просто обновлять эти существующие объекты, а не применять экстремальный подход к nuking для всех ваших локальных объектов, просто чтобы воссоздать их все (или почти).