2012-08-29 15 views
5

NSManagedObject सबक्लास के लिए मैं एक कस्टम init कैसे कोड कर सकता हूं? उदाहरण के लिए मुझे initItemWithName:Volume: जैसे कुछ चाहिए। जहां Item दो गुणों, name और volume के साथ NSManagedObject सबक्लास है।एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास के लिए कस्टम इनिट

+3

निम्नलिखित प्रश्न देखें http://stackoverflow.com/questions/10489578/custom-initializer-for-an-nsmanagedobject। मैं शायद आपकी मदद करूंगा। –

+0

@NenadMihajlovic +1। अच्छी टिप्पणी! –

उत्तर

6

कार्लोस,

के रूप में नेनाद मिहालोविक सुझाव आप इस के लिए एक वर्ग बना सकते हैं।

तो, उदाहरण के लिए, यदि आपके पास 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 प्रकार का उपयोग करना बेहतर हो सकता है।

+0

बहुत बहुत धन्यवाद Flex_Addicted !! लेकिन, एक सवाल: हम इन तरीकों को एक श्रेणी में क्यों बना सकते हैं, न कि 'NSManagedObject' subclass में? मेरे पास कई कक्षाएं हैं और मुझे कम से कम 7 श्रेणियों की आवश्यकता होगी। – Carlos

+0

आप http://stackoverflow.com/questions/9297101/nsmanagedobjects-with-categories पर और http://blog.chrismiles.info/2011/06/organising-core-data-for-ios.html पर जानकारी पा सकते हैं (मुझे बाद में बहुत अधिक टिप्स पसंद है)। यदि आप अपने प्रबंधित ऑब्जेक्ट के लिए कस्टम क्लास उत्पन्न करने के लिए एक्सकोड का उपयोग करते हैं तो एक साधारण स्पष्टीकरण: यदि आप अपनी इकाई में कुछ संशोधित करते हैं, और फिर उन परिवर्तनों को समायोजित करने के लिए कक्षा उत्पन्न करते हैं, तो एक्सकोड आपके द्वारा मूल उपclass में लिखे गए कोड को ओवरराइट करेगा। –

+0

समझ गया !! बहुत धन्यवाद!! – Carlos

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