के लिए कस्टम सेटर स्विफ्ट में NSManagedObject
के लिए कस्टम सेटर को कैसे कार्यान्वित करें। मुझे NSMangedObject
संपत्ति सेट करने से पहले कार्य करने की आवश्यकता है।स्विफ्ट: कोरडाटा NSManagedObject
उत्तर
मेरी सिफारिश केवीसी का उपयोग करना होगा। शायद सबसे सुरुचिपूर्ण समाधान नहीं, लेकिन संकल्पनात्मक रूप से केवीसी का तार्किक अनुप्रयोग है।
विशेषता का परिवर्तन देखें। init(entity:insertIntoManagedObjectContext:)
में परिवर्तन के लिए पंजीकरण करें या awakeFromFetch
और awakeFromInsert
में बेहतर हो सकता है, और willTurnIntoFault
में पर्यवेक्षक को हटा दें।
init(entity: NSEntityDescription!, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
addObserver(self, forKeyPath: "attribute", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old, context: nil)
}
override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer) {
if (keyPath == "attribute") {
// do what you need to do
}
}
स्विफ्ट 3 के लिए अपडेट किया गया:
init(entity: NSEntityDescription!, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
addObserver(self, forKeyPath: "attribute", options: [.old, .new], context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "attribute" {
// do what you need to do
}
}
भी एक सरल तरीका कैसे KVO सदस्यता को प्रबंधित किए बिना यह करने के लिए नहीं है। यह बस didChangeValueForKey:
इस तरह अधिभावी द्वारा किया जा सकता:
override func didChangeValueForKey(key: String) {
super.didChangeValueForKey(key)
if key == "propertyName" {
// do something now when propertyName changed
}
}
मैंने इसका भी उपयोग किया, दुर्भाग्यवश जब आप प्रलेखन को देखते हैं तो आपको नोटिस होगा कि 'आपको इस विधि को ओवरराइड नहीं करना चाहिए।' चेतावनी। तो मुझे लगता है कि यह शायद कुछ अप्रत्याशित प्रभाव हो सकता है। –
@erikAigner जो सच है। मैं काफी समय से इस दृष्टिकोण का उपयोग कर रहा हूं और मेरा मानना है कि दस्तावेज़ीकरण में चेतावनी ज्यादातर प्रदर्शन चिंताओं के लिए है, क्योंकि पूरे केवीओ/केवीसी इस विधि पर रिले कर रहे हैं (साथ ही 'willChangeValueForKey:') के साथ। केवीओ का सुझाव देने वाले स्वीकृत उत्तर में एक ही प्रदर्शन विशेषताएं हैं। अब तक मुझे इस दृष्टिकोण का उपयोग करने के एक अप्रत्याशित साइड इफेक्ट्स मिलते हैं। –
- 1. कोरडाटा: त्रुटि: NSManagedObject क्लास
- 2. स्विफ्ट: कोरडाटा और जेनेरिक NSOrderedSet
- 3. स्विफ्ट और कोरडाटा परीक्षण बनाम गैर-परीक्षण
- 4. आईओएस: स्विफ्ट: कोरडाटा: प्राइवेटमैनेज ऑब्जेक्ट कॉन्टेक्स्ट
- 5. कोरडाटा
- 6. कोरडाटा स्विफ्ट: डेटा को कैसे सहेजना और लोड करना है?
- 7. NSManagedObject की डिलीट विधि
- 8. NSManagedObject
- 9. NSManagedObject
- 10. एक्सकोड 4 कोरडाटा
- 11. कोरडाटा
- 12. कोरडाटा
- 13. कोरडाटा
- 14. कोरडाटा
- 15. NSManagedObject Subclass
- 16. NSManagedObject NSAtomicStoreCacheNode
- 17. कोरडाटा विशेषता
- 18. कोरडाटा मॉडल
- 19. कोरडाटा: पथ
- 20. कोरडाटा: NSManagedObjectContext
- 21. कोरडाटा क्वेरी
- 22. स्टोर लेकिन CoreData को NSManagedObject सहेजें नहीं?
- 23. आप कोरडाटा एंट्री को कैसे अपडेट करते हैं जो स्विफ्ट में पहले ही सहेजा जा चुका है?
- 24. स्विफ्ट
- 25. NSManagedObject उपवर्गों और setValuesForKeysWithDictionary:
- 26. NSManagedObject: isUpdated और isSnserted
- 27. उप-वर्गीकृत NSManagedObject
- 28. NSManagedObject, NSManagedObjectContext और NSManagedObjectModel
- 29. एक नया NSManagedObject ऑब्जेक्ट
- 30. कोर डेटा - NSManagedObject
विशेष रूप से यह मेरी समस्या 'विकल्पों हल: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old'। धन्यवाद। – Hokage
मुझे लगता है कि एनएसएमएनेज ऑब्जेक्ट गलती में बदल जाता है तो केवीओ दृष्टिकोण अलग हो जाएगा। – Andy