
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创建了额外的对象,而不是更新现有的对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)