领域更新删除现有数据
Realm Update Deleting existing data
对 iOS13 使用 Swift 5。
我正在尝试使用联系人选择器结果更新现有的 Realm 记录。该函数删除除新内容外的所有对象内容。
我的代码
class Person: Object {
@objc dynamic var personId = UUID().uuidString
@objc dynamic var firstName: String = ""
@objc dynamic var surname: String = ""
@objc dynamic var mobileNumber: Int = 0
@objc dynamic var password: String = ""
@objc dynamic var myContactID: String = ""
override static func primaryKey() -> String? {
return "personId"
}
}
extension HomeController: CNContactPickerDelegate {
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
picker.dismiss(animated: true, completion: nil)
let person = Person()
let me = realm.objects(Person.self).filter("mobileNumber == %@", mobileNumber)
person.myContactID = contact.identifier
person.personId = me.first!.personId
try! realm.write {
realm.add(person, update: .modified)
}
self.viewWillAppear(true)
}
}
Realm 数据库中 Person class 的所有现有内容都消失了,除了 myContactID 和 personID。
那是因为您正在用新数据更新 Person
。
let person = Person()
行创建一个具有所有默认值的新实例。 (firstName: String = ""
等..)
因此,当您将 myContactID
和 personId
分配给这个新创建的 person
时,它将如下所示:
Person {
personId = FAE4C224-D37E-4C77-B6F1-C60A92F188D0;
firstName = ;
surname = ;
mobileNumber = ;
password = ;
myContactID = contactIdentifier;
}
并且当您调用 realm.add(person, update: .modified)
时,它会用这个新创建的 person
覆盖与主键关联的记录。
您想获取现有的 person
并对其进行修改。你可以这样做:
guard let me = realm.objects(Person.self).filter("mobileNumber == %@", mobileNumber).first else { return }
try! realm.write {
me.myContactID = contact.identifier
}
对 iOS13 使用 Swift 5。
我正在尝试使用联系人选择器结果更新现有的 Realm 记录。该函数删除除新内容外的所有对象内容。
我的代码
class Person: Object {
@objc dynamic var personId = UUID().uuidString
@objc dynamic var firstName: String = ""
@objc dynamic var surname: String = ""
@objc dynamic var mobileNumber: Int = 0
@objc dynamic var password: String = ""
@objc dynamic var myContactID: String = ""
override static func primaryKey() -> String? {
return "personId"
}
}
extension HomeController: CNContactPickerDelegate {
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
picker.dismiss(animated: true, completion: nil)
let person = Person()
let me = realm.objects(Person.self).filter("mobileNumber == %@", mobileNumber)
person.myContactID = contact.identifier
person.personId = me.first!.personId
try! realm.write {
realm.add(person, update: .modified)
}
self.viewWillAppear(true)
}
}
Realm 数据库中 Person class 的所有现有内容都消失了,除了 myContactID 和 personID。
那是因为您正在用新数据更新 Person
。
let person = Person()
行创建一个具有所有默认值的新实例。 (firstName: String = ""
等..)
因此,当您将 myContactID
和 personId
分配给这个新创建的 person
时,它将如下所示:
Person {
personId = FAE4C224-D37E-4C77-B6F1-C60A92F188D0;
firstName = ;
surname = ;
mobileNumber = ;
password = ;
myContactID = contactIdentifier;
}
并且当您调用 realm.add(person, update: .modified)
时,它会用这个新创建的 person
覆盖与主键关联的记录。
您想获取现有的 person
并对其进行修改。你可以这样做:
guard let me = realm.objects(Person.self).filter("mobileNumber == %@", mobileNumber).first else { return }
try! realm.write {
me.myContactID = contact.identifier
}