2017-03-08 8 views
8

Próbuję dodać obiekt klasy inny niż obiekt rzeczywisty do czegoś podobnego.Dodaj obiekt nieistniejący jako ignorowaną właściwość do obiektu realm w swift?

class TrainTripItinerary: Object { 
    dynamic var departStationName: String? 
    dynamic var departStationCode: String? 
    var runningStatus: TrainRunningStatus? 

    override static func ignoredProperties() -> [String] { 
     return ["runningStatus"] 
    } 

} 

Chociaż TrainRunningStatus nie jest klasą dziedzinową.

class TrainRunningStatus { 
    var trainDataFound: String? 
    var startDate: String? 
    var startDayDiff: String? 
} 

Nie mogę teraz zaktualizować właściwości runningstatus. Ktoś wie, jak to działa? Pobieram osobno runnningstatus i przypisuję go do obiektu dziedziny później, ale pozostaje on zerowy nawet po przypisaniu.

np.

Ta linia nie działa, trainTripItinerary właściwość runningStatus nie jest poprawnie ustawiona, zawsze jest zerowa.

+1

Co masz na myśli, że nie możesz go zaktualizować? Nie możesz ustawić jej na nową wartość? – Connor

+0

Tak! Zaktualizowałem także moje pytanie. – kidsid49

+0

A jeśli umieścisz punkt przerwania zaraz po ustawieniu go na nową wartość, pozostanie on zerowy? Brzmi to dziwnie i podejrzewam, że jest ustawiony na zero gdzie indziej. Ponieważ jest to zignorowana właściwość, jeśli pobierasz obiekt * po * ustawieniu go, będzie on zerowy, ponieważ nie jest zapisywany. – Connor

Odpowiedz

3

Zgodnie z sugestiami w komentarzach upewnij się, że używasz tego samego wystąpienia z TrainTripItinerary, ponieważ ignorowane właściwości nie będą automatycznie aktualizować ich wartości w różnych instancjach.

Zobacz przykładowy kod poniżej pokazuje, jak ignorowane właściwości pracować

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

Po pierwsze, Twój kod nie jest poprawny.

class TrainTripItinerary: Object { 
    dynamic var departStationName: String? 
    dynamic var departStationCode: String? 
    var runningStatus: TrainRunningStatus? 

    override static func ignoredProperties() -> [String] { 
     return ["runningStatus"] 
    } 
} 

func ignoredProperties() -> [String] jest używany tylko w nieruchomościach. Ponieważ twoja własność var runningStatus: TrainRunningStatus? nie zaczyna się od dynamic, nie jest to właściwość Realm. Nie musisz tutaj używać func ignoredProperties() -> [String].

var runningStatus: TrainRunningStatus? jest tu nazywana "własnością przejściową" w Królestwie. Zwykle właściwość przejściowa jest obliczana w oparciu o aktualną datę lub właściwości Rzeczywistości, Realm nie robi nic na właściwościach przejściowych i należy je zachować samodzielnie.

Jeśli więc chcesz po prostu użyć runningStatus jako właściwości przejściowej, możesz po prostu usunąć kod override static func ignoredProperties() -> [String].

Powiązane problemy