2011-12-30 14 views
15

में NSDictionary डालें मेरे पास एक NSDictionary और CoreData डेटाबेस है। मैं डेटाबेस में NSDictionary डालना चाहता हूँ।CoreData

  1. मैं यह कैसे कर सकता हूं (यदि संभव हो तो कोड स्निपेट)?

  2. शब्दकोश की विशेषता के लिए उपयुक्त प्रकार क्या है?

+0

तो तुम एक कोर डाटा वस्तु के रूप में शब्दकोश (सम्मिलित करना चाहते हैं के लिए (मेरे NSManagedObject उप वर्ग के नाम 'DictTest' है) यानी इससे एक एनएसएमएनेज्ड ऑब्जेक्ट बनाएं) या क्या आपके पास कोर डेटा में कुछ इकाई है और शब्दकोश को इसके लिए एक संपत्ति के रूप में चाहते हैं? – mrueg

+0

हाँ मैं कोर डेटा ऑब्जेक्ट – OXXY

उत्तर

27

आपको एनएसडीटा में अपने एनएस डिक्शनरी को क्रमबद्ध करने की आवश्यकता होगी, कोरडाटा एनएसडीटा को पकड़ सकता है।
लेकिन आप अपने NSDictionary के खोज (अनुमानित) तत्व को खोजने में सक्षम नहीं होंगे।

और अगर हम इस बारे में सोचते हैं, NSDictionary डेटा का एक संग्रह है।
डेटाबेस में एक तालिका डेटा का संग्रह है।
कोरडाटा में डेटा के संग्रह में आपको सबसे नज़दीकी चीज मिली है NSManagedObject।

तो मेरी सलाह एक एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास बनाना होगा जो आपके एनएस डिक्शनरी में आपके पास मौजूद जानकारी रखेगी। key विशेषता होगी और मान उस विशेषता के value होगा। और आप उस NSManagedObject उपclass की विशेषता के आधार पर खोज करने में सक्षम होंगे।

+0

विन्सबर्न के रूप में शब्दकोश डालना चाहता हूं, पहले मैं जवाब के लिए धन्यवाद देना चाहता हूं और दूसरा मैं आपको बताना चाहता हूं कि मैं आपके समाधान से एनएस डिक्शनरी से बचता हूं क्योंकि मुझे एक विशाल एक्सएमएल फ़ाइल से डेटा प्राप्त हुआ है, इसलिए मैं चाहता हूं डेटा – OXXY

+1

@OXXY भरने के लिए एक गतिशील तरीका का उपयोग करें - आपका स्वागत है। मुझे यकीन नहीं है कि मैं आपका अनुसरण कर रहा हूं, अगर आपकी एक्सएमएल फ़ाइल बहुत बड़ी है तो आप इसे एक या 2 या 3 अलग एनएसएमएनेज ऑब्जेक्ट सबक्लास पर पार्स कर सकते हैं। आपके एक्सएमएल की सामग्री के आधार पर आप अपनी क्रिया को संशोधित कर सकते हैं। और इस तरह आप इसे पूछने में सक्षम होंगे। यदि आपको इसकी क्वेरी करने की आवश्यकता नहीं है तो आप उस फ़ाइल को सीधे डिस्क पर सहेज सकते हैं, और यूआरएल को कोर डेटा ऑब्जेक्ट में स्टोर कर सकते हैं, जो लगभग एनएसडीटा के रूप में स्टोर करने जैसा ही होगा। और यदि उनमें से केवल एक ही समय में दृढ़ता के लिए कोर डेटा का उपयोग नहीं करता है। मुझे यकीन नहीं है कि आपका आर्किटेक्चर क्या है इसलिए मैं लाइन से बाहर हो सकता हूं। –

+0

मैं XML पार्सिंग और डेटाबेस में संग्रहीत बारे में एक प्रश्न डाल दिया है शायद यह आपकी मदद कर मुझे का पालन करने के http://stackoverflow.com/questions/8518884/import-xml-file-data-into-coredata – OXXY

4

आप क्यों नहीं बस अपने NSDictionary से सभी डेटा के साथ एक इकाई का निर्माण नहीं करतीं और फिर बस के माध्यम से यह पार्स।

this out for some CoreData code snippets. देखें आप अपने शब्दकोशों की जानकारी संग्रहीत करने के लिए बस कुछ इकाइयां बना सकते हैं। तब आप अपने शब्दकोश से पार्स करें और उचित गुण बचा सकते हैं:

NSManagedObject *photoObject = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" 
                   inManagedObjectContext:context];  
[photoObject setPhotographer:[myDictionary objectForKey:@"photographer"]]; 
and so on... 

चाहे कितना जटिल आप XML डेटा संरचना, तो आप एक अच्छा इकाई संरचना की स्थापना कर सकते हैं, यह काफी बस गूंगा यह सब CoreData में करने के लिए आसान है । यदि आप एक ही क्षेत्र में पूरे शब्दकोश को डंप करने की बजाए इकाइयों को बनाने के लिए समय लेते हैं तो आपके पास प्रश्नों के साथ एक बहुत ही आसान समय होगा।

+0

प्रिय होगा Mattieu अपने क्यों मेरे द्वारा इस प्रश्न पर है http://stackoverflow.com/questions/8518884/import-xml-file-data-into-coredata – OXXY

5

अपने इकाई वर्णन सेट करें, एक नया ऑब्जेक्ट सम्मिलित है, तो का उपयोग करें:

[managedObject setValuesForKeysWithDictionary:dict]; 
+0

वाह नहीं पता था के लिए जवाब है कि मौजूद है, धन्यवाद की तरह कुछ है ! – dreampowder

+1

ध्यान दें कि इस विधि का उपयोग करते समय इकाई विवरण में कोई गुम टुकड़ा नहीं है - देखें http://www.cimgf.com/2011/06/02/saving-json-to-core-data/ - "इस विधि में , शब्दकोश में निहित कुंजियां निर्धारित करती हैं कि प्रबंधित ऑब्जेक्ट पर कौन सी चाबियाँ उपयोग की जाती हैं। लेकिन क्या होगा यदि शब्दकोश में एक कुंजी है जो इकाई विवरण का हिस्सा नहीं है? तो आपका ऐप इस त्रुटि के साथ क्रैश हो जाता है कि ऑब्जेक्ट कुंजी-मूल्य कोडिंग नहीं है कुंजी के लिए अनुपालन। इस विधि का उपयोग करने से आप जिस वेब सेवा का उपयोग कर रहे हैं उसकी दया पर आपके ऐप की स्थिरता डालती है। " –

8

मैं एक और तरीका है डेटा प्रकार 'Transformable' के साथ एक विशेषता बनाने के द्वारा CoreData में शब्दकोश में जोड़ने के लिए मिल गया।

उदाहरण के लिए डेटा प्रोजेक्ट ट्रांसफॉर्मेबल के साथ आपकी प्रोजेक्ट & विशेषता में एक इकाई बनाएं। NSManagedObject के लिए उप-वर्ग उत्पन्न करें। विशेषता डेटा प्रकार 'आईडी' के साथ उपलब्ध होगी, एनएस डिक्शनरी में बदलें।

नीचे क्या मैं था

-(void)InsertIntoDataBase 
{ 
    DictTest *entityDict=(DictTest*)[NSEntityDescription insertNewObjectForEntityForName:@"DictTest" inManagedObjectContext:self.managedObjectContext]; 
    NSMutableDictionary *mutDict=[NSMutableDictionary dictionary]; 
    [mutDict setValue:@"1" forKey:@"1"]; 
    [mutDict setValue:@"2" forKey:@"2"]; 
    [mutDict setValue:@"3" forKey:@"3"]; 
    [mutDict setValue:@"4" forKey:@"4"]; 
    [mutDict setValue:@"5" forKey:@"5"]; 
    [mutDict setValue:@"6" forKey:@"6"]; 
    [mutDict setValue:@"7" forKey:@"7"]; 
    [mutDict setValue:@"8" forKey:@"8"]; 
    [mutDict setValue:@"9" forKey:@"9"]; 
    [mutDict setValue:@"10" forKey:@"10"]; 
    [entityDict setInfoDict:mutDict]; 
    NSError *error; 
    if(![self.managedObjectContext save:&error]) 
    { 
     NSLog(@"error description is : %@",error.localizedDescription); 
    } 
    else{ 
     NSLog(@"Saved"); 

    } 
} 

लाई जा रही है रिकॉर्ड

-(void)FetchRecord 
{ 
    NSFetchRequest *request=[[NSFetchRequest alloc]init]; 
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"DictTest" inManagedObjectContext:self.managedObjectContext]; 
    [request setEntity:entity]; 
    NSArray *fetchArray= [self.managedObjectContext executeFetchRequest:request error:nil]; 
    for (DictTest *obj in fetchArray) { 
     NSLog(@"Dict is : %@",obj.infoDict); 
    } 
} 
संबंधित मुद्दे