Ios 将新对象添加到域中的现有列表
我有两节课。首先看起来是这样的:Ios 将新对象添加到域中的现有列表,ios,swift,realm,realm-list,Ios,Swift,Realm,Realm List,我有两节课。首先看起来是这样的: class Person: Object { dynamic var owner: String? var dogs: List<Dogs>() } class Dogs: Object { dynamic var name: String? dynamic var age: String? } 现在,在ViewController中的“viewDidLoad”中,我用空的列表创建对象Person,并将其保存在域中
class Person: Object {
dynamic var owner: String?
var dogs: List<Dogs>()
}
class Dogs: Object {
dynamic var name: String?
dynamic var age: String?
}
现在,在ViewController
中的“viewDidLoad”中,我用空的列表创建对象Person
,并将其保存在域中
func viewDidLoad(){
let person = Person()
person.name = "Tomas"
try! realm.write {
realm.add(Person.self)
}
}
它工作得很好,我可以创建Person
,当我尝试在SecondViewController
中的viewdiload
中读取此数据时,问题就开始了:
var persons: Results<Person>?
func viewDidLoad(){
persons = try! realm.allObjects()
}
这里,我的应用程序因一条信息而崩溃:只能在写事务中添加、删除或创建域中的对象-首先在RLMRealm实例上调用beginWriteTransaction。
如何将新的Dog
添加到列表
以及如何更新person[0]?
我使用SWIFT 3.0编写如下内容:
if let person = persons?[0] {
person.dogs.append(newDog)
}
try! realm.write {
realm.add(person, update: true)
}
请检查您如何获得领域
。每次调用defaultRealm
,您都会得到一个新的领域 Person
属性的类型为Results
,它是一个包含由领域管理的Person
对象的集合。为了修改托管对象的属性,例如将新元素附加到列表属性,您需要在写事务中
try! realm.write {
persons[0].dogs.append(newDog)
}
旁注:除了在解决问题的write事务中添加代码外,您还可以按名称查询
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 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)
}
}