Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete all data from specific Realm Object Swift

Before i get too far into my question. My goal, which may influence your answers, is to remove Object data if it is no longer in the cloud.

So if I have an array ["one", "two", "three"]

Then in my server I remove "two"

I want my realm to update the change.

I figure the best way to do this is to delete all data in the specific Object, then call my REST API to download the new data. If there is a better way, please let me know.

Okay so here is my problem.

I have an Object Notifications()

every time my REST API is called, before it downloads anything I am running this:

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

I get this error after running: Can only delete an object from the Realm it belongs to.

so i tried something like this:

for notification in notifications {
    realm.delete(notification)
}
realm.commitWrite()

The error I get within xcode is this: "Type Notifications does not conform to protocol 'SequenceType'

Not really sure where to go from here.

Just trying to figure out realm. Completely new to it

Note: realm.deleteAll() works, but I don't want all of my realm deleted, just certain Objects

like image 695
YichenBman Avatar asked May 28 '15 18:05

YichenBman


1 Answers

You're looking for this:

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

or perhaps this:

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)
  }
}

Although ideally, you'd be setting a primary key on Notifications so that you can simply update those existing objects rather than taking the extreme approach of nuking all your local objects simply to recreate them all (or almost).

like image 180
jpsim Avatar answered Sep 16 '22 22:09

jpsim