2012-04-18 8 views
6

का नाम बदलें मेरे पास मेरे कोर्डटा लगातार स्टोर के साथ समस्या को ठीक करने के लिए एक (संभवतः) सरल है। यूआरएल dummyURL.sqliteनिरंतर स्टोर समन्वयक यूआरएल

मैं परियोजना के साथ काम करने के लिए पहले तारीख को किया का उपयोग कर

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 

    if (persistentStoreCoordinator != nil) 
    { 
     return persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"dummyURL.sqlite"]; 

    NSError *error = nil; 
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 
    { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return persistentStoreCoordinator; 
} 

, और यह नाम बदलने के लिए .. अब सब मेरे वर्तमान परीक्षण उपकरणों भूल गए हैं:

मैं के साथ बनाया (4) 2 से अधिक महीने के लिए प्रयोग में थे, इस एप्लिकेशन के उपयोग काफी मात्रा में डेटा संग्रह और एक बेवकूफ यूआरएल ^^

अद्यतन साथ भंडारण मैं लगातार दुकानों के प्रवास पर कुछ शोध किया और इस समारोह ने लिखा है:

-(void)migrate{ 

    NSPersistentStoreCoordinator *psc = [self.dataHandler.managedObjectContext persistentStoreCoordinator]; 
    NSURL *oldURL = [psc URLForPersistentStore:[[psc persistentStores]objectAtIndex:0]]; 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSURL *newURL = [[appDelegate applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; 

    NSError *error = nil; 

    NSPersistentStore *oldStore = [psc persistentStoreForURL:oldURL]; 
    NSPersistentStore *newStore = [psc migratePersistentStore:sqliStoreOld 
                  toURL:newURL 
                 options:nil 
                 withType:NSSQLiteStoreType 
                 error:&error]; 

} 

प्रश्न 1will this work or will i lose some data with that?

प्रश्न 2afterwards will i just have to change the appendString in my persistenstore function?

उत्तर

3

मैं इसे अपने आप को हल करने के लिए migratePersistentStore समारोह का उपयोग कर प्रबंधित:

-(void)migrate{ 

    NSPersistentStoreCoordinator *psc = [self.dataHandler.managedObjectContext persistentStoreCoordinator]; 
    NSURL *oldURL = [psc URLForPersistentStore:[[psc persistentStores]objectAtIndex:0]]; 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSURL *newURL = [[appDelegate applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; 

    NSError *error = nil; 

    NSPersistentStore *oldStore = [psc persistentStoreForURL:oldURL]; 
    NSPersistentStore *newStore = [psc migratePersistentStore:sqliStoreOld 
                  toURL:newURL 
                 options:nil 
                 withType:NSSQLiteStoreType 
                 error:&error]; 

} 

बाद में मैं सिर्फ appendURL database.sqli करने के लिए मेरे AppDelegate में बदल दिया है। एक आकर्षण की तरह काम करता है :)

0

मैं नया URL के साथ एक दूसरे लगातार दुकान बनाने और कहीं एक बटन कहा कि प्रतियों की सभी की सिफारिश करेंगे आपके पास डेटा एक नया है। सुनिश्चित करें कि आप यह सुनिश्चित करने के लिए परीक्षण करें कि ऐप से पुराने को हटाने से पहले आपका सभी डेटा नए लगातार स्टोर में है।

+0

त्वरित उत्तर के लिए धन्यवाद। मैं लगातार प्रतिरोधी अवधारणा पर थोड़ा सा छायादार हूं (इसलिए मैंने इसे बनाने के बाद इसे और स्पर्श नहीं किया है) ... मैं वर्तमान में 'माइग्रेटपर्सिस्टेंटस्टोर' की खोज कर रहा हूं लेकिन मैं वास्तव में dataloss के कारण इसे आजमाने की डरता हूं ..:/ मैं कहां रखूंगा माइग्रेशन कोड? –

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