【问题标题】:User made from Realm object has same Primary Key Realm由 Realm 对象创建的用户具有相同的主键 Realm
【发布时间】:2016-11-11 14:44:14
【问题描述】:

我正在尝试使用真实模型来制作用户资料,下面是模型:

class UserProfile: Object {
dynamic var id = UUID().uuidString
dynamic var name:String = ""
dynamic var age = ""
dynamic var email = ""
dynamic var userName = ""
dynamic var passWord = ""

override static func primaryKey() -> String? {
    return "id"
}

}

我正在通过 IBAction 按钮将对象添加到默认领域文件,如下所示:

@IBAction func signUpButton(_ sender: UIButton) {



    try! realm.write {

    user.userName = userNameTextField.text!
    user.passWord = passWordTextField.text!
    user.email = emailTextField.text!
    user.name = fullNameTextField.text!
    user.age = ageTextField.text!
    user.id = UUID().uuidString

    realm.add(user)

    }
    userQuery()
}

问题是创建的用户对象具有相同的“id”/主键:

Jane Vergo 17 岁,身份证号:A6A67E2D-C9A9-4D6B-815C-27BC22B3089B

杰克·劳森 19 岁,身份证号:A6A67E2D-C9A9-4D6B-815C-27BC22B3089B

卢克·凯奇 20 岁 ID:A6A67E2D-C9A9-4D6B-815C-27BC22B3089B

是否有办法让每个用户都有不同的主键/id?

【问题讨论】:

    标签: ios iphone swift xcode realm


    【解决方案1】:

    Realm 是一个对象数据库,所以每次都需要创建一个新对象:

    try! realm.write {
    
        user = User() // Create a new user instance
    
        user.userName = userNameTextField.text!
        user.passWord = passWordTextField.text!
        user.email = emailTextField.text!
        user.name = fullNameTextField.text!
        user.age = ageTextField.text!
        user.id = UUID().uuidString
    
        realm.add(user)
    
    }
    

    【讨论】:

    • 是的,这行得通!虽然现在唯一的问题是每个用户现在都拥有完全相同的主键,但有没有办法让每个用户都获得一个单独的唯一主键?
    • 更重要的是主键每次都在变化。
    • 听起来你逻辑有问题。首先,Realm 不允许您使用相同的主键编写两个单独的对象,因此我怀疑您实际上在数据库中只有一个不断更新的对象。使用领域浏览器确认您在数据库中的内容。其次,我假设您是说如果您多次注册同一个用户,您会获得不同的主键。您需要检查正在注册的用户尚未注册。一种选择是将userName 设置为主键而不是id
    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2017-01-25
    相关资源
    最近更新 更多