2017-03-08 5 views
8

私は非realmクラスオブジェクトをrealmオブジェクトに追加しようとしています。非realmオブジェクトを、realfieldオブジェクトに対して無視されたプロパティとして追加しますか?

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をフェッチし、それを後でレルムオブジェクトに割り当てますが、割り当て後もnilのままです。

例えば、この行は、動作していない

let runningStatus = TrainRunningStatus() 
trainTripItinerary.runningStatus = runningStatus 

、trainTripItinerary runningStatusプロパティが適切につねにnilに設定されていません。

+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]は、レルムプロパティでのみ使用されます。プロパティvar runningStatus: TrainRunningStatus?dynamicで始まらないため、Realmプロパティではありません。ここでfunc ignoredProperties() -> [String]を使用する必要はありません。

var runningStatus: TrainRunningStatus?ここでは、Realmでは「一時的なプロパティ」と呼ばれています。通常、一時的なプロパティは、現在の日付またはRealmプロパティに基づいて計算されたものです。Realmは一時プロパティで何も実行しません。

したがって、一時的なプロパティとしてrunningStatusを使用したい場合は、コードoverride static func ignoredProperties() -> [String]を削除するだけで済みます。

関連する問題