2016-12-05 123 views
6

我有從JSON響應保存列表的領域對象。但是現在我需要刪除該對象,如果該對象不再從JSON列表中。我該怎麼做? 這是我的init的境界迅速從領域刪除對象

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

順便說一句,我有主鍵的item.id – Voyager

+0

你可能婉t檢查[領域鏈接](https://realm.io/docs/swift/latest/#deleting-objects)關於如何刪除... –

回答

3

刪除在領域對象你可以做的是指定一個主鍵對象要插入,並在接收到新的解析JSON當你驗證,如果該鍵之前就已經存在,或不添加它。

class Items: Object { 
    dynamic var id = 0 
    dynamic var name = "" 

    override class func primaryKey() -> String { 
     return "id" 
    } 
} 

插入新對象時,首先查詢Realm數據庫以驗證它是否存在。

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

if !repeatedItem { 
    // Insert it 
} 
14

想象你Items對象有一個id屬性,並且要刪除不包括在新的一組舊值,要麼你可以只用

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

刪除一切,然後添加所有項目再次境界, 或者你也可以查詢不包括在新集的每一項

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)