2017-03-08 65 views
8

我想添加一个非领域类对象的领域对象是这样的。在swift中将非领域对象作为忽略属性添加到领域对象?

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并稍后将其分配给领域对象,但即使在赋值后它仍保持为零。

例如。

let runningStatus = TrainRunningStatus() 
trainTripItinerary.runningStatus = runningStatus 

此行不行,trainTrip行为runningStatus属性设置不正确,它始终为零。

+1

你是什么意思,你无法更新它?您无法将其设置为新值? – Connor

+0

是啊!更新我的问题。 – kidsid49

+0

如果您在将其设置为新值之后立即设置断点,它将保持零?这听起来很奇怪,我怀疑它被设置在其他地方。由于它是一个被忽略的属性,所以如果你在*设置它后获取对象*,它将为零,因为它没有被保存。 – Connor

回答

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) 
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]