Обновление объекта Realm завершается неудачно при записи - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь обновлять объект области каждый раз, когда происходит изменение значения в firebase. Так же, как при изменении объекта на сервере, он должен автоматически инициировать новую запись и обновлять объект первичным ключом uid.

Здесь - вопрос, который я отправил пару дней назад. Это дало мне мгновенное решение, которое сработало на данный момент, но затем появилась следующая ошибка.

  1. При первом запуске все работало нормально и обновлял объект. Но, как только я перезапустил программу, она создала дубликат объекта с пустым первичным ключом.

  2. Вылетает приложение, сообщающее, что я пытаюсь перезаписать объект первичного ключа.

  3. Я даже получил ошибки, в которых говорилось, что транзакция записи уже выполняется.

Я точно следую предоставленной Документации Царства здесь , но совершенно не повезло.

Код, из которого я делаю триггеры обновления для объекта области:

        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)



//                        }
                }
            }
        }
    })

Объект моего Царства:

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
}
}

Я действительно изо всех сил пытаюсь найти правильное решение для этого. Любая помощь очень ценится. Если есть больше информации, которая будет предоставлена ​​для этого вопроса. Пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...