将新对象添加到领域中的现有列表
Adding new Object to existing List in Realm
我有两个 class。首先看起来是这样的:
class Person: Object {
dynamic var owner: String?
var dogs: List<Dogs>()
}
和第二个 class 看起来像这样:
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()
}
并尝试添加新的 Dog
到 List
在按钮操作中执行此操作:
@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
以及如何更新人员 [0]?
我用 SWIFT 3.0
写这样的东西:
if let person = persons?[0] {
person.dogs.append(newDog)
}
try! realm.write {
realm.add(person, update: true)
}
请检查您是如何获得 realm
的。每次调用 defaultRealm
,您都会获得新的领域。
persons
属性 是 Results<Person>
类型,它是一个包含 Person
对象的集合,由 Realm 管理。为了修改托管对象的 属性,例如将新元素附加到列表 属性,您需要在写入事务中。
try! realm.write {
persons[0].dogs.append(newDog)
}
旁注:除了在写入事务中添加代码来解决您的问题外,您还可以按名称查询 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)
}
}
为领域数据库添加对象
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)
}
}
我有两个 class。首先看起来是这样的:
class Person: Object {
dynamic var owner: String?
var dogs: List<Dogs>()
}
和第二个 class 看起来像这样:
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()
}
并尝试添加新的 Dog
到 List
在按钮操作中执行此操作:
@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
以及如何更新人员 [0]?
我用 SWIFT 3.0
写这样的东西:
if let person = persons?[0] {
person.dogs.append(newDog)
}
try! realm.write {
realm.add(person, update: true)
}
请检查您是如何获得 realm
的。每次调用 defaultRealm
,您都会获得新的领域。
persons
属性 是 Results<Person>
类型,它是一个包含 Person
对象的集合,由 Realm 管理。为了修改托管对象的 属性,例如将新元素附加到列表 属性,您需要在写入事务中。
try! realm.write {
persons[0].dogs.append(newDog)
}
旁注:除了在写入事务中添加代码来解决您的问题外,您还可以按名称查询 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)
}
}
为领域数据库添加对象
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)
}
}