2016-12-05 19 views
6

Ich habe Realm Object, die Liste von der JSON-Antwort speichern. Aber jetzt muss ich das Objekt entfernen, wenn das Objekt nicht mehr in der Liste von JSON ist. Wie mache Ich das? Das ist mein init für ReichSwift Objekt aus dem Realm entfernen

func listItems (dic : Array<[String:AnyObject]>) -> Array<Items> { 
     let items : NSMutableArray = NSMutableArray() 
     let realm = try! Realm() 
     for itemDic in dic { 
      let item = Items.init(item: itemDic) 
       try! realm.write { 
        realm.add(item, update: true) 
       } 
      items.addObject(item) 
     } 
     return NSArray(items) as! Array<Items> 
} 
+0

Btw könnte Sie i für die item.id – Voyager

+0

Primärschlüssel wan t, um [realm link] (https://realm.io/docs/swift/latest/#deleting-objects) zum Löschen zu überprüfen ... –

Antwort

3

an Objekte in Realm zu löschen Was Sie tun können, einen Primärschlüssel zum Objekt zuweisen Sie einfügen, und wenn ein neuen geparsten JSON empfangen Sie überprüfen, ob die Schlüssel bereits vorhanden ist oder nicht, bevor es hinzufügen.

Wenn Sie neue Objekte einfügen, fragen Sie zuerst die Realm-Datenbank ab, um zu überprüfen, ob sie existiert.

let repeatedItem = realm.objects(Items.self).filter("id = 'newId'") 

if !repeatedItem { 
    // Insert it 
} 
14

stellen Sie sich Ihr Items Objekt eine ID-Eigenschaft hat, und Sie wollen die alten Werte entfernen, nicht in der neuen Set enthalten, entweder man konnte alles löschen mit nur

let result = realm.objects(Items.self) 
realm.delete(result) 

und dann alle Elemente hinzufügen wieder in den Bereich, oder Sie können auch jedes Element abfragen, nicht in der neuen Set enthalten

let items = [Items]() // fill in your items values 
// then just grab the ids of the items with 
let ids = items.map { $0.id } 

// query all objects where the id in not included 
let objectsToDelete = realm.objects(Items.self).filter("id NOT IN %@", ids) 

// and then just remove the set with 
realm.delete(objectsToDelete)