ios - 将对象添加到单个 Realm 文件

标签 ios swift xcode realm

在开始之前,先为大家介绍一下背景知识,以便您可能的答案不会超出我的理解水平: 1. 我只是开始学习 swift,并且仍在学习 Realm 和 Xcode 的细节。 2. 我唯一的 OOP 经验是使用 java,而且水平很低。

这是我的问题:

我正在尝试使单个 Realm 文件包含“用户配置文件”数据的完整列表(即姓名、年龄、电子邮件)。我尝试通过允许 IBAction 按钮将对象保存到 Realm 文件中来实现此目的,如下所示

@IBAction func signUpButton(_ sender: UIButton) {

    let realm = try! Realm()



    try! realm.write {

    user.userName = userNameTextField.text!
    user.passWord = passWordTextField.text!
    user.email = emailTextField.text!
    user.name = fullNameTextField.text!
    user.age = ageTextField.text!

    profile.person.append(user)


    realm.add(profile)

    }
}

这里唯一的问题是它没有添加对象,而是更新之前创建的对象,谁能告诉我如何使用 IBAction 按钮来完成此操作?

最佳答案

如果对象已添加到 Realm 文件中,那么您可以通过打开写入事务并简单地修改其中的属性来更改其属性。

let realm = try! Realm()

let newUser = User()
newUser.userName = userNameTextField.text!

// Add to Realm for the first time
try! realm.write {
   realm.add(newUser)
}

// Update its property at a later time
try! realm.write {
   newUser.userName = userNameTextField.text!
}

如果之前已经添加了这些对象,则无需再次调用 realm.addprofile.person.append(user)

我不确定您的示例代码中的userprofile来自哪里。由于该方法内没有 let user = User() ,我假设您在 View Controller 类的其他位置创建它们的单个副本。

如果 profile 已添加到 Realm,则不应再次调用 realm.add(profile),因为这将添加第二个副本(并且每次调用append可能不会中断,但不推荐)。

要确定 profile 是否已在 Realm 文件中,您可以使用 profile.realm != nil 进行检查。要检查用户是否已属于个人资料,您可以使用Realm的反向关系功能。

class User: Object {
   dynamic var userName = ""
   dynamic var password = ""
   dynamic var email = ""
   dynamic var name = ""
   dynamic var age = ""

   let profile = LinkingObjects(fromType: Profile.self, property: "person")
}

关于ios - 将对象添加到单个 Realm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40540397/

相关文章:

swift - XCode Playground (Swift) 中的递归函数

ios - 如何符号化崩溃日志 Xcode?

ios - 导航栏上的奇怪淡入淡出

ios - 为自定义 View 不工作的 UIBarButtonItem 添加目标

ios - 跟踪点击到应用安装?

ios - 当您使用 App Store Connect 从 App Store 中删除一个应用程序时,更改需要多长时间?

ios - 如何调试 navigationcontroller.tintColor 不改变?

ios - UIPinchGestureRecognizer 触发两次

xcode - 在 TableView 中更改页脚中按钮的按钮文本颜色

ios - iPhone在不同端口上意外复制TCP数据包