我正在创建一个项目。我想如果 userID
已经存在,它不会添加用户。但不知何故,我的代码无法正常工作。
这是我的 Realm 模型对象(User.swift):
import Foundation
import RealmSwift
class User: Object {
@objc dynamic var userID = Int()
@objc dynamic var username = ""
@objc dynamic var full_name = ""
@objc dynamic var myBool = Bool()
override static func primaryKey() -> String? {
return "userID"
}
}
这是添加用户的按钮:
@IBAction func add(_ sender: Any) {
let myUser = User()
let JSON_userID = Int(arc4random_uniform(5)) // This is temporary. I am going to get code from JSON, but using random for testing purpose.
if (myUser.userID != JSON_userID) {
myUser.userID = JSON_userID
myUser.username = "myUsername"
myUser.full_name = "My Name"
let realm = try! Realm()
try! realm.write {
realm.add(myUser)
}
}
else {
print("Already exist")
}
}
有时它会运行代码,但大多数时候它会因错误而崩溃:
libc++abi.dylib:以 NSException 类型的未捕获异常终止
。
最佳答案
当您在User
对象中定义主键时,Realm can handle this automatically如果您在 write
闭包内将 update
参数设置为 true
。
let realm = try! Realm()
try! realm.write {
realm.add(myUser, update: true)
}
如果 update
参数未设置或 false
,当您尝试添加具有现有主键的对象时,Realm 将抛出异常。
这使得 if/else
条件变得无用。它可以被删除。
如果需要知道用户是否已经存在,可以通过主键值请求Realm:
realm.object(ofType: User.self, forPrimaryKey: JSON_userID)
如果用户不存在,结果将为nil
。
关于ios - 使用 Realm 对象保存用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534239/