使用Realm对象保存用户

时间:2017-10-02 21:50:31

标签: ios swift xcode realm

我正在创建一个项目。我想如果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

1 个答案:

答案 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