我從Object
這個類繼承:對象已被刪除或無效的境界
class Location: Object {
dynamic var id: String = ""
dynamic var name: String = ""
override class func primaryKey() -> String {
return "id"
}
}
這個類被用作一個實例,我的經理裏面是這樣的:
class LocationServiceAPI {
fileprivate var _location: Location?
var location: Location? {
get {
if _location == nil {
let realm = try! Realm()
_location = realm.objects(Location.self).first
}
return _location
}
set {
let realm = try! Realm()
if let newValue = newValue {
// delete previous locations
let locations = realm.objects(Location.self)
try! realm.write {
realm.delete(locations)
}
// store new location
try! realm.write {
realm.add(newValue, update: true)
_location = newValue
}
} else {
let locations = realm.objects(Location.self)
try! realm.write {
realm.delete(locations)
}
}
}
}
}
所以每當我得到一個位置我刪除舊的(新舊位置可能相同)並將其替換爲新的,然後我使用newValue
作爲屬性_location
的新值,但每當我嘗試訪問location
時,它都會給我'Object has已被刪除或無效「。
我真的很困惑,因爲location
將持有從setter傳遞的值,但不是領域!
注意:如果我停止刪除,那麼它會正常工作。
如何刪除丟棄的位置?第二個問題:你使用線程嗎? –
@bogdanf我用刪除部分更新了我的答案。 –
因此,您只需在整個應用程序中使用一個'Location'對象(刪除數據庫中的所有'Location'對象,因此我假設您只有一個)。爲什麼不將它存儲在NSUserDefaults中,實際上不需要數據庫來存儲一個對象:-) 現在,如果您絕對需要將它保存在Realm中,只需從數據庫直接保存/檢索它即可我已經在我的回覆中向您展示了,真的沒有必要將它緩存到LocationServicesAPI類中的變量中。 –