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