2017-03-08 59 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]