Обновление объекта области, имеющего первичный ключ - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь обновить объект области с помощью первичного ключа. Имейте в виду, я не обновляю первичный ключ, а только другое поле. Ниже мой мой объект:

class UserData : Object {

@objc dynamic var name: String? = nil
@objc dynamic var bio: 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
}
}

Я пытаюсь обновить свойство "bio" объекта, но мне постоянно дают

исключение для "невозможно обновить первичный ключ"

Теперь я действительно не понимаю, почему мне выдают эту ошибку, хотя Я не обновляю первичный ключ в объекте.

Дополнительные примечания:

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

Код для того же:

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)
                    self.usercache.uid = uuid
                    self.usercache.bio = u.aboutme
                    self.usercache.writeToRealm()
                }
            }
        }
//            RealmService.uirealm.realm.refresh() ------> No sure about this
    })
}

1 Ответ

0 голосов
/ 27 апреля 2018

Я думаю, что проблема в этой строке

self.usercache.uid = uuid

Поскольку self.usercache уже является объектом Realm, поэтому при обновлении он использует uid => и выдает исключение.

Вместо повторного использования self.usercache попробуйте создать новый объект UserData

...