2017-03-08 4 views
8

मैं इस तरह कुछ वास्तविक वस्तु को एक गैर-दायरे वर्ग वस्तु जोड़ने की कोशिश कर रहा हूं।एक गैर वास्तविक वस्तु को अदृश्य संपत्ति के रूप में अवांछित संपत्ति के रूप में जोड़ें?

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

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

} 

जबकि ट्रेनरिंगस्टैटस एक दायरे वर्ग नहीं है।

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

मैं अब runningstatus संपत्ति को अद्यतन करने में सक्षम नहीं हूँ। किसी को पता है कि यह कैसे काम करता है? मैं अलग से रनिंगिंगस्टैटस लाता हूं और इसे बाद में दायरे के ऑब्जेक्ट में असाइन करता हूं लेकिन यह असाइनमेंट के बाद भी शून्य रहता है।

उदाहरण के लिए।

let runningStatus = TrainRunningStatus() 
trainTripItinerary.runningStatus = runningStatus 

इस लाइन काम नहीं कर रहा, trainTripItinerary 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] केवल क्षेत्र संपत्तियों पर प्रयोग किया जाता है। चूंकि आपकी संपत्ति var runningStatus: TrainRunningStatus?dynamic से शुरू नहीं होती है, इसलिए यह वास्तविक संपत्ति नहीं है। आपको यहां func ignoredProperties() -> [String] का उपयोग करने की आवश्यकता नहीं है।

var runningStatus: TrainRunningStatus? यहां दायरे में "क्षणिक संपत्ति" कहा जाता है। आम तौर पर एक क्षणिक संपत्ति वर्तमान तारीख या वास्तविक संपत्तियों पर आधारित कुछ गणना की जाती है, दायरे क्षणिक गुणों पर कुछ भी नहीं करेगी और आपको उन्हें स्वयं बनाए रखना चाहिए।

तो यदि आप एक क्षणिक संपत्ति के रूप में runningStatus का उपयोग करना चाहते हैं, तो आप बस override static func ignoredProperties() -> [String] कोड को हटा सकते हैं।

संबंधित मुद्दे