2009-06-30 12 views
7

में डेटा लोड करें मैं एक नेविगेशन-आधारित एप्लिकेशन को कार्यान्वित कर रहा हूं। उपयोगकर्ता ब्याज के नोड पर ड्रिल करेगा। मैं कोर डेटा का उपयोग कर रहा हूं, अधिकांशतः क्योंकि मैं इसे आजमा देना चाहता हूं। मैं शुरुआत में डेटाबेस कैसे लोड करूं? क्या मुझे कस्टम कोड लिखना चाहिए जो डेटाबेस को प्रारंभ में लोड करता है, या मेरे लिए ऐसा करने के लिए कुछ उपकरण है?कोर-डेटा स्कीमा

+0

अरे आंद्रेई - क्या आप जानकारी के साथ अपने SQLLite डेटाबेस को पॉप्युलेट करने या वास्तव में कोर डेटा मॉडल लोड करने के बारे में बात कर रहे हैं एक बार ऐप चल रहा है? इस के लिए –

उत्तर

3

कोर डेटा संदर्भ में डेटा आयात करने के लिए कोई स्वचालित (यानी अंतर्निहित) विधि नहीं है।

मुझे लगता है कि इस वजह से कोर डाटा वास्तव में एक वस्तु ग्राफ प्रबंधन ढांचा है और डेटा के बीच मानचित्रण और वस्तु उदाहरणों स्कीमा पर निर्भर करता है (कि सिर्फ डिस्क के लिए उस वस्तु ग्राफ लागू करने के लिए सक्षम होने के लिए होता है) (और इसलिए होगा कम से कम कुछ कोड की आवश्यकता है)।

आप पहले से ही किसी अन्य स्वरूप में डेटा है, तो आप importing data into a Core Data context पर कोर डाटा प्रोग्रामिंग गाइड की धारा पढ़ना चाहिए। यदि आपके पास पहले से किसी अन्य प्रारूप में डेटा नहीं है, तो आपको कोड को किसी भी तरह से लिखना होगा (इंटरमीडिएट प्रारूप उत्पन्न करने या सीधे संदर्भ को पॉप्युलेट करने के लिए)।

अंत में, हालांकि यह वास्तव में एक सार्वजनिक API नहीं है, कोर डाटा XML स्वरूप सुंदर हाथ से या XML- आधारित उपकरण के किसी भी संख्या का उपयोग कर के साथ काम करना आसान है। आपके डेटा की जटिलता के आधार पर, आप एक्सएमएल-बैक किए गए लगातार स्टोर को उत्पन्न करने के लिए पर्याप्त एक्सएमएल स्कीमा को रिवर्स-इंजीनियर कर सकते हैं। फिर आप इस स्टोर को SQLite लगातार स्टोर में माइग्रेट कर सकते हैं और आप अपने रास्ते पर हैं।

0

वर्तमान में जहां तक ​​मुझे पता है कि आपको डेटाबेस को पॉप्युलेट करने के लिए कस्टम कोड लिखना है।

यह एक नकारात्मक पक्ष की तरह प्रतीत होता है, मैं वास्तव में कोरडेटा द्वारा उपयोग किए जाने वाले डेटा स्रोतों की बैच (खोल) पूर्व-आबादी के लिए एक उपकरण देखना चाहता हूं।

17

प्लिस्ट का उपयोग करके कोर डेटा स्टोर को प्रीलोड करने का एक आसान तरीका यहां दिया गया है।

शब्दकोशों की एक सरणी युक्त एक संपत्ति सूची बनाएं। प्रत्येक शब्दकोश की कुंजी को अपने प्रबंधित ऑब्जेक्ट की चाबियों से मेल करें।

alt text http://www.freeimagehosting.net/uploads/b0b1909e81.png

फिर, इस विधि पहली बार ऐप्लिकेशन को लॉन्च फोन:

:

- (void)loadDataFromPropertyList { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"]; 
    NSArray *items = [NSArray arrayWithContentsOfFile:path]; 

    NSManagedObjectContext *ctx = self.managedObjectContext; 

    for (NSDictionary *dict in items) { 
     NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx]; 
     [m setValuesForKeysWithDictionary:dict]; 
    } 

    NSError *err = nil; 
    [ctx save:&err]; 

    if (err != nil) { 
     NSLog(@"error saving managed object context: %@", err); 
    } 
} 

कॉल loadDataFromPropertyList पहली बार application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions के कार्यान्वयन में निम्न कोड शामिल करके एप्लिकेशन लॉन्च होने

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if (![defaults objectForKey:@"firstRun"]) 
{ 
    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    [self loadDataFromPropertyList]; 
} 
+0

धन्यवाद, यह एक समय हो गया है के बाद से मैं इस प्रयोग किया जाता है, मैं एक SIGBRT त्रुटि मिल रही है, मुझे याद नहीं है कि मैं क्या अगली बार जब मैं इस लोड करना चाहते हैं को नष्ट करने वाला हूँ। विचार? –