我正在创建一个项目。我想如果userID
已经存在,则不会添加用户。但不知何故,我的代码无法正常工作。
这是我的Realm Model Object(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: terminating with uncaught exception of type NSException
。
答案 0 :(得分:1)
如果您在User
对象中定义了主键,Realm can handle this automatically如果您在update
闭包内将true
参数设置为write
。
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
。