ios – Swift 3:Realm创建了额外的对象,而不是更新现有的对象

ios – Swift 3:Realm创建了额外的对象,而不是更新现有的对象,第1张

概述在我的AppDelegate中 let realm = try! Realm() print("number of users") print(realm.objects(User.self).count) if !realm.objects(User.self).isEmpty{ if realm.objects(User.self).first!.isL 在我的AppDelegate中

let realm = try! Realm()    print("number of users")    print(realm.objects(User.self).count)    if !realm.objects(User.self).isEmpty{        if realm.objects(User.self).first!.isLogged {            User.current.setFromrealm(user: realm.objects(User.self).first!)            let storyboard = UIStoryboard(name: "Main",bundle: nil)            let vIEwController = storyboard.instantiateVIEwController(withIDentifIEr :"Tabbar") as! CustomTabbarController            self.window?.rootVIEwController = vIEwController        }    } else {        try! realm.write { realm.add(User.current) }    }

我只在应用程序中没有用户对象时才创建用户

感谢这个answer我以下面的方式更新我的对象

public func update(_ block: (() -> VoID)) {    let realm = try! Realm()    try! realm.write(block)}

但事实证明它创建了新的User对象.如何始终更新现有的而不是创建新对象?

请注意,我使用User.current,因为我的对象是单例

登录和注销后,它会打印用户数= 2,这意味着更新现有用户会创建一个新用户

解决方法 除非你在其中调用realm.add,否则realm.write无法添加新对象.如果您在数据库中获得了2个对象,则意味着您检查对象是否已存在的逻辑是否失败,或者在注销时删除前一个对象的逻辑失败.

在同一对象上调用realm.add两次不会向数据库添加2个副本,因此它也可能表示您在逻辑中创建了2个非托管User对象.

无论如何,我建议仔细检查你的逻辑,以确保你不会意外地向Realm添加两个对象.

let realm = try! Realm()let firstUser = realm.objects(User.self).firstif let firstUser = firstUser {    User.current.setFromrealm(user: firstUser)    let storyboard = UIStoryboard(name: "Main",bundle: nil)    let vIEwController = storyboard.instantiateVIEwController(withIDentifIEr :"Tabbar") as! CustomTabbarController    self.window?.rootVIEwController = vIEwController}else {    try! realm.write { realm.add(User.current) }}
总结

以上是内存溢出为你收集整理的ios – Swift 3:Realm创建了额外的对象,而不是更新现有的对象全部内容,希望文章能够帮你解决ios – Swift 3:Realm创建了额外的对象,而不是更新现有的对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1059534.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存