2009-12-02 11 views
7

मैं का उपयोग कर एक NSManagedObject उपवर्ग आरंभ कर रहा हूँ:NSManagedObject उपवर्गों और setValuesForKeysWithDictionary:

- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues 

मैं भी जानबूझकर यह अनिर्धारित कुंजी है, जो निश्चित रूप की एक अपवाद फेंक चाहिए दे रहा हूँ।

तो, मैं लागू कर दिया है: एक महत्वपूर्ण अपरिभाषित है

- (void)setValue:(id)value forUndefinedKey:(NSString *)key 

हैं, मैं यह सही कुंजी के लिए नक्शे।

लेकिन, मेरा कार्यान्वयन कभी नहीं बुलाया जाता है, बजाय NSManagedObject के कार्यान्वयन प्रयोग किया जाता है, जो बारी में अब भी एक अपवाद फेंकता है।

क्या कोई व्यवहार (या बग) है जो setValuesForKeysWithDictionary: को setValue:forUndefinedKey: के सबक्लास कार्यान्वयन का उपयोग करने से रोकता है? के रूप में अनुरोध

कोड जोड़ना, लेकिन जब से मैं सिर्फ एक मौजूदा विधि है, जिसमें कहा जाता है नहीं प्राप्त करता है को लागू करने हूँ, मैं नहीं जानता कि यह कितनी मदद हो जाएगा:

संदर्भ में:

- (Company*)companyWithDictionary:(NSDictionary*)values{ 

    Company* newCompany = (Company*)[NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:self]; 

    [newCompany setValuesForKeysWithDictionary:values]; 

    return newCompany; 
} 

Company उपवर्ग (कभी नहीं कहा जाता है) में:

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ 

    if([key isEqualToString:idKey]){ 

     [self setValue:value forKey:@"uniqueID"]; 

    }else if([key isEqualToString:descriptionKey]){ 

     [self setValue:value forKey:@"descriptionText"]; 

    }else if([key isEqualToString:timeUpdatedKey]){ 

     [self setValue:value forKey:@"dateUpdated"]; 

    }else{ 

     [super setValue:value forUndefinedKey:key]; 

    } 
} 

उत्तर

3

वहाँ निश्चित रूप से है कि इस रोकता NSManagedObject के लिए स्वाभाविक कुछ भी नहीं है; मैं इस ऐप में बिल्कुल ठीक कर रहा हूं जिस पर मैं काम कर रहा हूं। क्या आप अपना अधिक कोड पोस्ट कर सकते हैं?

एक विचार, भी: क्या आपको यकीन है कि यह setValue:forUndefinedKey: है जो अपवाद फेंक रहा है? एक प्रबंधित ऑब्जेक्ट के लिए, मुझे पूरा यकीन है कि चीजों को ठीक से काम करने के लिए आपको valueForUndefinedKey: (गेटटर) को भी लागू करने की आवश्यकता है।

+0

हाँ, मैं इसे स्टैक ट्रेस में देखता हूं। और यह निश्चित रूप से NSManagedObject के कार्यान्वयन भी है। –

+0

मैंने मूल्य लागू नहीं किया है ForUndefinedKey:। मैं कोशिश करूँगा, लेकिन मुझे नहीं लगता कि वह सेटर के माध्यम से क्यों होगा। –

+0

कुछ कोड जोड़ा गया ... –

2

सरल प्रश्न, लेकिन क्या आप अपने मॉडल में इकाई के लिए अपने एनएसएमएजेडऑब्जेक्ट सबक्लास के क्लास नाम को निर्दिष्ट कर रहे हैं?

इसके अलावा, आपने कहा कि आप प्रबंधित ऑब्जेक्ट को प्रारंभ कर रहे हैं ... कैसे? आपको ज्यादातर मामलों में + [NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext:] के माध्यम से इसे डालना चाहिए, जब तक कि आपके पास कोई अच्छा कारण न हो।

+0

हां और हां। मैंने यह सुनिश्चित करने के लिए अपने मॉडल कक्षाओं को भी बनाया। मैंने मॉडल वर्ग में और श्रेणी के रूप में valueFOrUndefinedKey को कार्यान्वित करने का भी प्रयास किया। –

+0

यह वास्तव में अजीब है। क्या आप इसे कम परीक्षण मामले में पुन: पेश कर सकते हैं? मैंने इसी तरह की चीजें की हैं लेकिन इस समस्या में कभी भाग नहीं लिया। –

1

कोरडाटा ढांचे का एक त्वरित वर्ग-डंप इंगित करता है कि NSManagedObject भी setValuesForKeysWithDictionary: ओवरराइड करता है, इसलिए ऐसा लगता है कि यह निश्चित रूप से उस विधि के लिए कुछ अनुकूलन कर रहा है, शायद प्रदर्शन कारणों या उसके लिए कुछ। मैं शायद setValuesForKeysWithDictionary: के बराबर अपनी खुद की विधि लिखूंगा और इसके बजाय पूरी गड़बड़ी से बचने के लिए कहूंगा। कुछ ऐसा:

- (void)mySetValuesForKeysWithDictionary:(NSDictionary*)dict 
{ 
    for (NSString* key in dict) 
     [self setValue:[dict objectForKey:key] forKey:key]; 
} 
+0

जो अनिवार्य रूप से मैंने किया था, लेकिन एनएसएनयूएल मानों के लिए लेखांकन। सिक्सटन के समाधान को लागू करने के बाद भी, कुछ और अजीब त्रुटि हुई, इसलिए मैंने तौलिया में फेंक दिया है। –

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