我有一個具有User對象的Auth對象。我存儲Auth對象,因爲它也有其他信息(比如我的訪問令牌)。如何在Swift中存在Realm中的嵌套var更新?
如果我登錄一次,然後退出 - 沒有問題。它創建auth對象,然後創建用戶對象...並註銷刪除auth對象(但保留用戶對象),這對我來說很好。
然而,當我去登錄第二個時間,因爲它試圖重新創建用戶對象,但主鍵是一樣的,我得到這個錯誤失敗:
"Can't set primary key property 'id' to existing value '123123123'"
(123123123是一個樣本ID)
我如何使它,當我添加一個Auth對象的領土,它更新現有的用戶(如果存在),而不是試圖創建一個新的瓦特/相同的主鍵?
謝謝!
驗證對象:
class Auth: Object, Mappable {
static var currentAuth: Auth? {
set {
let realm = try! Realm()
try! realm.write {
if let oldValue = currentAuth {
realm.delete(oldValue)
}
if let currentAuth = newValue {
realm.add(currentAuth)
}
}
NSNotificationCenter.defaultCenter().postNotificationName("didChangeLogin", object: nil)
}
get {
let realm = try! Realm()
// there should only be 1 or 0
return realm.objects(Auth).first
}
}
dynamic var accessToken: String?
dynamic var user: User?
func mapping(map: Map) {
accessToken <- map["access_token"]
user <- map["user"]
}
// MARK: - Convenience
class func logout() {
currentAuth = nil
}
// MARK: - Required
required init() { super.init() }
required init?(_ map: Map) { super.init() }
required init(value: AnyObject, schema: RLMSchema) { super.init(value: value, schema: schema) }
required init(realm: RLMRealm, schema: RLMObjectSchema) { super.init(realm: realm, schema: schema) }
}
用戶對象:
class User: Base {
dynamic var username: String?
dynamic var bio: String?
override func mapping(map: Map) {
super.mapping(map)
username <- map["username"]
bio <- map["bio"]
}
// MARK: - Requireds
required init() { super.init() }
required init?(_ map: Map) { super.init() }
required init(value: AnyObject, schema: RLMSchema) { super.init(value: value, schema: schema) }
required init(realm: RLMRealm, schema: RLMObjectSchema) { super.init(realm: realm, schema: schema) }
}
^對於參考
'''update:true''' is pure magic – JCarlos