ios - 使用 Realm 对象保存用户

标签 ios swift xcode realm

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

相关文章:

ios - 低内存警告总是导致 iPad(第一代)崩溃

ios - Swift 4 - 如何覆盖选项卡栏将打开 View Controller

ios - 解析函数 `findObjectsInBackgroundWithBlock:` 检索部分数据库对象,但不是全部

swift - 将 4 个字节的 (Swift3) 数据放入 UInt32 的两种方法

iphone - Xcode + GitHub。什么是正确的设置

ios - ld : library not found for -lGGLCloudMessaging

ios - PrimaryViewController的UINavigationBar嵌入到UITabBarController后变色

ios - xcode UILabel 文本适合 Storyboard 但不适合设备

iphone - 当选择文本字段时将 View 移到键盘后面

ios - NSDateFormatter dateFromString 返回错误月份的日期