2012-04-05 34 views
5

मेरे मॉडल ऑब्जेक्ट में से एक enum संपत्ति है। कोरडाटा में इसे स्टोर करने के लिए, मैंने NSNumber ऑब्जेक्ट का उपयोग किया है।CoreData के अंदर एक enum संपत्ति संग्रहीत करना और इसे सुविधाजनक बनाना

फिर भी, मैं इसे एक सुविधाजनक तरीके से एक enum प्रकार के रूप में एक्सेस करना चाहता हूं। इसे प्राप्त करने का सबसे अच्छा अभ्यास क्या है?

अभी तक, मैं निम्नलिखित कोड के साथ गया हूं।

MyObject.m

@dynamic myPersistentEnum; 

- (BOOL)isValidEnumValue { 
    if (self.myPersistentEnum) { 
     int intValue = [self.type intValue]; 
     if (intValue >= ABTypeValue1 && intValue <= ABTypeValueN) { 
      return YES; 
     }   
    } 

    ELog(@"Undefined enumValue %@", self.myPersistentEnum); 
    return NO; 
} 

- (ABType)myConvenientEnum { 
    if ([self isValidEnumValue]) { 
     return [self.type intValue]; 
    } 

    return ABTypeUnknown; 
} 

- (void)setMyConvenientEnum:(ABType)enumValue { 
    NSNumber *oldValue = [self.myPersistentEnum retain]; 
    self.myPersistentEnum = [NSNumber numberWithInt:enumValue]; 
    if ([self isValidEnumValue]) { 
     [oldValue release]; 
    } else { 
     self.myPersistentEnum = oldValue; 
     [oldValue release]; 
    } 
} 

मेरे सवालों में MyObject.h

typedef enum _ABType { 
    ABTypeUnknown, 
    ABTypeValue1, 
    ... 
    ABTypeValueN 
} ABType; 

@interface MyObject : NSManagedObject 

@property (nonatomic, retain) NSNumber * myPersistentEnum; // Defined in my Core Data model 

@property (nonatomic) ABType myConvenientEnum; 

में

हैं:

  • वहाँ कुछ उपरोक्त कोड में गलत है?
  • int एनएसएनंबर में एनम को परिवर्तित करते समय उपयोग करने के लिए सही प्रकार है? (NSNumber -(enum)enumValue; विधि प्रदान नहीं करता है)
  • क्या आप रनटाइम कोरडाटा मॉडल सत्यापन के लिए सत्यापन पहलू छोड़ देंगे?
  • [NEW] मैं अन्य डेवलपर्स के लिए स्पष्ट कैसे कर सकता हूं कि सुविधाजनक संपत्ति का उपयोग किया जाना चाहिए, न कि एनएसएनंबर संपत्ति?

उत्तर

0

आईओएस 5 में कोरडाटा देशी पूर्णांक प्रकारों का समर्थन करता है, इसलिए यदि आप चाहें तो NSNumber की बजाय आप इसका उपयोग कर सकते हैं।

संपादित

Fwiw, संकलक enum संभावित मान यह धारण के लिए आवश्यक के रूप में के रूप में छोटा हो कर सकते हैं। Enum - (int) myEnumValue को डालने के लिए सबसे अच्छा है - जब NSNumber में असाइन किया जाता है, क्योंकि यह मानता है कि यह प्रकार सटीक आकार है जिसे आप बताते हैं।

+0

कूल, मुझे यह नहीं पता था। दुर्भाग्यवश, जिन ऐप्स पर मैं काम कर रहा हूं उन्हें कम से कम कुछ महीनों के लिए आईओएस 4 का समर्थन करना है। –

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

  • कोई संबंधित समस्या नहीं^_^