Избегайте добавления повторного объекта в царство

Я запрашиваю данные Parse.com и сохраняю их в локальной базе данных Realm (iOS/swift). Каждый объект имеет уникальное свойство (A), но также может быть одним и тем же свойством (B). Каков наиболее эффективный способ избежать добавления объектов с таким же свойством B в базу данных области? Спасибо заранее.

Ответ 1

Вы можете установить первичный ключ на объекте, чтобы Realm гарантировал наличие только одного из каждого объекта в БД.

class Person: RLMObject {
    dynamic var id = 0
    dynamic var name = ""

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

Вам все равно нужно проверить, находится ли этот объект в базе данных уже или нет. Он будет извлекать объект на основе первичного ключа (либо ищет объекты через свойство (A), либо свойство (B)). Тогда, если объект существует, не добавляйте, если он не существует, добавьте его в БД.

Что-то вроде этого:

var personThatExists = Person.objectsWhere("id == %@", primaryKeyValueHere).firstObject()

  if personThatExists { 
    //don't add 
  } else { 
    //add our object to the DB 
  }

Если вы используете первичные ключи и вам не нужны обновляемые значения объектов, вы можете использовать метод createOrUpdate. Realm создаст новый объект, если он не существует, иначе он обновит тот, который существует со значениями из объекта, в который вы проходите.

Надеюсь, что это поможет