NSManagedObject
सबक्लास के लिए मैं एक कस्टम init
कैसे कोड कर सकता हूं? उदाहरण के लिए मुझे initItemWithName:Volume:
जैसे कुछ चाहिए। जहां Item
दो गुणों, name
और volume
के साथ NSManagedObject
सबक्लास है।एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास के लिए कस्टम इनिट
उत्तर
कार्लोस,
के रूप में नेनाद मिहालोविक सुझाव आप इस के लिए एक वर्ग बना सकते हैं।
तो, उदाहरण के लिए, यदि आपके पास Item
वर्ग है, तो आप Item+Management
नामक एक श्रेणी बना सकते हैं और वहां सृजन कोड डाल सकते हैं। यहां आप एक साधारण उदाहरण पा सकते हैं।
// .h
@interface Item (Management)
+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context;
@end
// .m
+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context
{
Item* item = (Item*)[NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context];
theItem.name = theName;
theItem.volume = theVolume;
return item;
}
आप एक नया आइटम बनाने के लिए चाहते हैं, जैसे
#import "Item+Management.h"
एक आयात करते हैं और इस
Item* item = [Item itemWithName:@"test" volume:[NSNumber numberWithInt:10] inManagedObjectContext:yourContext];
// do what you want with item...
यह दृष्टिकोण बहुत लचीला है और बहुत आसान के दौरान बनाए रखने के लिए है की तरह का उपयोग ऐप विकासशील
आप Stanford Course Lecture 14 कोड नमूना पर और जानकारी प्राप्त कर सकते हैं। इसके अलावा, स्टैनफोर्ड द्वारा आईट्यून्स पर मुफ्त वीडियो भी देखें (यदि आपके पास ऐप्पल आईडी है)।
उम्मीद है कि मदद करता है।
पीएस सादगी के लिए, मुझे लगता है कि name
एक NSString
है और volume
एक NSNumber
है। volume
के लिए NSDecimalNumber
प्रकार का उपयोग करना बेहतर हो सकता है।
बहुत बहुत धन्यवाद Flex_Addicted !! लेकिन, एक सवाल: हम इन तरीकों को एक श्रेणी में क्यों बना सकते हैं, न कि 'NSManagedObject' subclass में? मेरे पास कई कक्षाएं हैं और मुझे कम से कम 7 श्रेणियों की आवश्यकता होगी। – Carlos
आप http://stackoverflow.com/questions/9297101/nsmanagedobjects-with-categories पर और http://blog.chrismiles.info/2011/06/organising-core-data-for-ios.html पर जानकारी पा सकते हैं (मुझे बाद में बहुत अधिक टिप्स पसंद है)। यदि आप अपने प्रबंधित ऑब्जेक्ट के लिए कस्टम क्लास उत्पन्न करने के लिए एक्सकोड का उपयोग करते हैं तो एक साधारण स्पष्टीकरण: यदि आप अपनी इकाई में कुछ संशोधित करते हैं, और फिर उन परिवर्तनों को समायोजित करने के लिए कक्षा उत्पन्न करते हैं, तो एक्सकोड आपके द्वारा मूल उपclass में लिखे गए कोड को ओवरराइट करेगा। –
समझ गया !! बहुत धन्यवाद!! – Carlos
निम्नलिखित प्रश्न देखें http://stackoverflow.com/questions/10489578/custom-initializer-for-an-nsmanagedobject। मैं शायद आपकी मदद करूंगा। –
@NenadMihajlovic +1। अच्छी टिप्पणी! –