Realm对象更新在写入时失败

时间:2018-05-01 21:13:31

标签: ios swift firebase realm

每次firebase中的值发生更改时,我都会尝试更新域对象。就像服务器中的对象发生变化一样,它应该自动触发新的写入并使用主键uid更新一个obejct。

Here是我几天前发布的一个问题。它给了我一个瞬间解决方案,但暂时出现了错误。

  1. 第一次运行时,一切运行正常并更新了对象。但是,一旦我重新运行该程序,它就会创建一个带有空主键的重复对象。

  2. 它崩溃了应用程序,说我正在尝试覆盖主键对象。

  3. 我甚至在说写事务已在进行中时遇到错误。

  4. 我正在关注 here 提供的Realm文档,但完全没有运气。

    我正在进行更新的代码触发到领域对象:

            FBDataservice.ds.REF_USERS.child(uuid).observe(.value, with: { (snapshot) in
            if snapshot.hasChild("credentials") {
                if let snap = snapshot.value as? Dictionary<String, Any> {
                    if let cred = snap["credentials"] as? Dictionary<String, Any> {
                        let u = User(userid: uuid, userData: cred)
    //                        try! RealmService.uirealm.realm.write {
                            self.usercache.uid = uuid
                            self.usercache.name = u.name
                            self.usercache.bio = u.aboutme
                            if u.phoneNumer != nil {
                                self.usercache.phone = u.phoneNumer
                            }
                            self.usercache.email = u.email
                            self.usercache.username = u.username
                            if u.userPic != nil {
                                do {
                                    self.usercache.imageL = try Data(contentsOf: URL(fileURLWithPath: u.userPic))
                                }catch {
                                    print("The image doesnt exists")
                                }
                            }
    //                            self.usercache.writeToRealm()
                        try! RealmService.uirealm.realm.write {
                            RealmService.uirealm.realm.create(UserData.self, value: ["uid":uuid], update: true)
                        }
    //                            RealmService.uirealm.realm.add(self.usercache, update: true)
    
    
    
    //                        }
                    }
                }
            }
        })
    

    My Realm Object:

    class UserData : Object {
    
    @objc dynamic var name: String? = nil
    @objc dynamic var bio: String? = nil
    @objc dynamic var email: String? = nil
    @objc dynamic var username: String? = nil
    @objc dynamic var phone: String? = nil
    @objc dynamic var uid : String? = nil
    @objc dynamic var imageL: Data? = nil
    
    override static func primaryKey() -> String {
        return "uid"
    }
    
    }
    
    extension UserData {
    
    
    func writeToRealm(){
        try? RealmService.uirealm.realm.write {
            RealmService.uirealm.realm.add(self, update: true)
        }
    }
    
    func DeleteFromRealm(object: Results<UserData>){
        try? RealmService.uirealm.realm.write {
            RealmService.uirealm.realm.delete(object)
        }
    }
    
    }
    

    领域定义:

    class RealmService {
    
    static let uirealm = RealmService()
    
    private var _initRS = try! Realm()
    
    var realm: Realm! {
        return _initRS
    }
    }
    

    我真的很难找到正确的解决方案。任何帮助都非常感谢。如果要为此问题提供更多信息。请告诉我。

0 个答案:

没有答案