json - Realm +数据重复

标签 json swift realm

我对避免将数据重复写入 Realm 数据库有一些理解上的问题。我有以下对象模型

Person.swift

class Person: Object {
    let id = RealmOptional<Int>()
    dynamic var name = ""
    let dogs = List<Dog>()

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

狗.swift

class Dog: Object {
    dynamic var name = ""
    var owner: [Person] {
        return linkingObjects(Person.self, forProperty: "dogs")
}

Json数据是

{
  "id": 1001,
  "name": "Joe",
  "dogs": ["Sally","Molly","Lucy"]
}

将 json 数据解析为变量 - personId、personName 和 dogNameArray 后,将这些数据发送到 saveFunc()

func saveFunc() {

do {
    let newPerson = Person()
    newPerson.id.value = personId
    newPerson.name = personName

    let newDog = Dog()
    if dogNameArray.count > 0 {
    for dog in dogNameArray {
        newDog.name = dog
        newPerson.dog.append(newDog)
      }
    }

    let realm = try Realm()
    realm.beginWrite()
    realm.create(Person.self, value: newPerson, update: true)
    try realm.commitWrite()

} catch {
    print("create and updating error"
}

问题:数据是第一次创建的,但随后重新启动应用程序,由于主键,人员数据没有重新创建,这按我的预期工作,但狗的名字不断重复。所以我的问题是,如果人没有被覆盖,为什么仍然添加狗的名字,我哪里做错了?

最佳答案

我们可以确保,我们检查该人是否已经存在,如果是这样,请不要创建并添加狗:

func saveFunc() {

  do {

    let realm = try Realm()
    if let person = realm.objectForPrimaryKey(Person.self, key: personId){
       //Nothing needs be done.

    }else {

       //Create Person and dogs and relate them.

      let newPerson = Person()
      newPerson.id.value = personId
      newPerson.name = personName

      let newDog = Dog()
      if dogNameArray.count > 0 {
        for dog in dogNameArray {
          newDog.name = dog
          newPerson.dog.append(newDog)
        }
      }

      let realm = try Realm()
      realm.beginWrite()
      realm.create(Person.self, value: newPerson, update: true)
      try realm.commitWrite()
    }


  } catch {
    print("create and updating error"
}

关于json - Realm +数据重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129268/

相关文章:

javascript - 通过 Pebble 的 JSON API 访问汇率

javascript - 在 Angular 2/TypeScript 中上下遍历多维数组

c# - JSON.net 在没有模式的情况下反序列化 JSON

ios - 获取 Facebook API 个人资料图片 ios Swift

swift - 如何向 Realm 模型添加属性验证?

swift 2.1 : Unable to map JSON object to Realm object using ObjectMapper

ios - 未找到 RealmSwift 框架

javascript - 使用 fetch 发布数据后自动刷新

ios - 如何在单元测试中以编程方式点击 UIImageView?

ios - 本地通知不在从日期选择器中选择的确切时间工作,但在 swift 3 中几秒钟后