【发布时间】:2016-11-01 10:49:39
【问题描述】:
我有这个类继承自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 它给了我“对象已被删除或无效”。
我真的很困惑,因为location 将保存从 setter 传递的值,而不是领域!
注意:如果我停止删除,它将正常工作。
【问题讨论】:
-
如何删除丢弃的位置?第二个问题:你使用线程吗?
-
@bogdanf 我已经用删除部分更新了我的答案。
-
所以你在整个应用程序中只使用了一个
Location对象(你删除了数据库中的所有Location对象,所以我假设你只有一个)。为什么不将它存储在 NSUserDefaults 中,数据库真的不需要只存储一个对象 :-) 现在,如果你绝对需要将它保存在 Realm 中,只需像我一样直接从数据库中保存/检索它'已经在我的回复中向您展示了,真的,真的不需要将它缓存在 LocationServicesAPI 类的变量中。