我正在尝试将非域类对象添加到这样的域对象中。
class TrainTripItinerary: Object {
dynamic var departStationName: String?
dynamic var departStationCode: String?
var runningStatus: TrainRunningStatus?
override static func ignoredProperties() -> [String] {
return ["runningStatus"]
}
}
虽然TrainRunningStatus不是领域类。
class TrainRunningStatus {
var trainDataFound: String?
var startDate: String?
var startDayDiff: String?
}
我现在无法更新runningstatus属性。谁知道它是如何工作的?我单独获取runnningstatus并稍后将其分配给realm对象,但即使在赋值后它也会保持为零。
例如
let runningStatus = TrainRunningStatus()
trainTripItinerary.runningStatus = runningStatus
此行无效,trainTripItinerary runningStatus属性未正确设置,总是为零。
答案 0 :(得分:3)
根据评论中的建议,请确保使用相同的TrainTripItinerary
实例,因为忽略的属性不会在不同的实例中自动更新其值。
请参阅下面的示例代码,演示如何忽略属性
let realm = try! Realm()
try! realm.write {
realm.deleteAll()
}
let runningStatus = TrainRunningStatus()
var trainTripItinerary = TrainTripItinerary()
trainTripItinerary.runningStatus = runningStatus
assert(trainTripItinerary.runningStatus != nil)
try! realm.write {
realm.add(trainTripItinerary);
}
assert(trainTripItinerary.runningStatus != nil)
trainTripItinerary = realm.objects(TrainTripItinerary.self).first!
assert(trainTripItinerary.runningStatus == nil)
答案 1 :(得分:2)
首先,您的代码不正确。
class TrainTripItinerary: Object {
dynamic var departStationName: String?
dynamic var departStationCode: String?
var runningStatus: TrainRunningStatus?
override static func ignoredProperties() -> [String] {
return ["runningStatus"]
}
}
func ignoredProperties() -> [String]
仅用于Realm属性。由于您的媒体资源var runningStatus: TrainRunningStatus?
不以dynamic
开头,因此它不是Realm媒体资源。您无需在此处使用func ignoredProperties() -> [String]
。
var runningStatus: TrainRunningStatus?
这里被称为Realm中的“瞬态属性”。通常,瞬态属性是基于当前日期或Realm属性计算的,Realm不会对瞬态属性执行任何操作,您应该自己维护它们。
因此,如果您只想将runningStatus
用作临时属性,则只需删除代码override static func ignoredProperties() -> [String]
。