2016-12-05 3 views
6

У меня есть объект Realm, который сохраняет список из ответа JSON. Но теперь мне нужно удалить объект, если объект не находится в списке снова из JSON. Как я это делаю? Это моя инициализация для областиSwift Удалить объект из области

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 у меня есть первичный ключ для – Voyager

+0

вы item-id можете бледную t проверить [realm link] (https://realm.io/docs/swift/latest/#deleting-objects) о том, как удалить ... –

ответ

2

Первого предположение, которое приходит на ум, чтобы удалить все объекты, прежде чем вставлять новые объекты из JSON.

Лир подробнее об удалении объектов в Realm в 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 объект имеет свойство идентификатора, и вы хотите, чтобы удалить старые значения не включены в новый набор, либо вы можете удалить все только с

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) 
Смежные вопросы