【问题标题】:Adding new Object to existing List in Realm将新对象添加到领域中的现有列表
【发布时间】:2016-07-20 20:01:23
【问题描述】:

我有两节课。首先看起来像这样:

class Person: Object {
    dynamic var owner: String?
    var dogs: List<Dogs>()
}

第二类看起来像这样:

class Dogs: Object {
    dynamic var name: String?
    dynamic var age: String?
}

现在在“viewDidLoad”中的ViewController 中,我使用空的List 创建对象Person 并将其保存在Realm 中

func viewDidLoad(){
    let person = Person()
    person.name = "Tomas"
    try! realm.write {
        realm.add(Person.self)
    }
}

效果很好,我可以创建Person,当我尝试在ViewDidLoad 中读取SecondViewController 中的这些数据时,问题就开始了:

var persons: Results<Person>?

func viewDidLoad(){
    persons = try! realm.allObjects()
}

并尝试在按钮操作中添加新的DogList

@IBAction func addDog(){
    let newDog = Dogs()
    newDog.name = "Rex"
    newDog.age = "2"

    persons[0].dogs.append(newDog)

    // in this place my application crashed

}

这里我的应用程序崩溃并显示以下信息:Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first. 如何将新的 Dog 添加到 List 以及如何更新 person[0]? 我使用 SWIFT 3.0

【问题讨论】:

    标签: ios swift realm realm-list


    【解决方案1】:

    persons 属性的类型为 Results&lt;Person&gt;,它是一个包含由 Realm 管理的 Person 对象的集合。为了修改托管对象的属性,例如将新元素附加到列表属性,您需要在写入事务中。

    try! realm.write {
        persons[0].dogs.append(newDog)
    }
    

    【讨论】:

      【解决方案2】:

      这样写:

      if let person = persons?[0] {
          person.dogs.append(newDog)
      }
      
      try! realm.write {
          realm.add(person, update: true)
      }
      

      请检查您如何获得realm。每次拨打defaultRealm,您都会获得新的境界。

      【讨论】:

        【解决方案3】:

        旁注:除了在解决您的问题的写入事务中添加代码外,您还可以按名称查询Person,如下所示...

        @IBAction func addDog(){
            let newDog = Dogs()
            newDog.name = "Rex"
            newDog.age = "2"
        
            let personName = realm.objects(Person.self).filter("name = 'Tomas'").first!
        
            try! realm.write {
                personName.dogs.append(newDog)
            }
        }
        

        【讨论】:

          【解决方案4】:

          为领域数据库添加对象

          class Task : Object {
              @objc dynamic var id : Int = 0
              @objc dynamic var name = ""
              @objc dynamic var phone = ""
              @objc dynamic var address = ""
          }
          @IBAction func buttonSave(_ sender: Any) {
                  let realm  = try! Realm()
                  let user = Task()
                  user.id = 0
                  user.name = (txtName.text! as NSString) as String
                  user.phone = (txtPhone.text! as NSString) as String
                  user.address = (txtAddress.text! as NSString) as String
                  try! realm.write {
                      realm.add(user)
                      print("user:",user.name)
                  }
          
          
          
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多