在swift中向realm对象添加一个非域对象作为ignored属性?

时间:2017-03-08 12:03:31

标签: ios swift realm

我正在尝试将非域类对象添加到这样的域对象中。

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属性未正确设置,总是为零。

2 个答案:

答案 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]