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