2011-07-05 10 views
10

muszę zaimportować plik .sqlite do danych Core, szukałem w internecie i znalazłem:Jak importować istniejący plik sqlite do Core Data?

Core Data Tutorial: How To Preload/Import Existing Data

To jest stworzenie skryptu Pythona do tej bazy poprzez czytanie w treści naszej starej bazy danych i tworzenie odpowiednich wierszy w nowej bazie danych. Ale moja baza danych sqlite jest zbyt duża pod względem liczby tabel i kolumn, co może kosztować mnie znaczną ilość czasu.

znalazłem też to:

Using a Pre-Populated SQLite Database with Core Data on iPhone OS 3.0

Ale ja nie bardzo rozumiem to, że wygląda to kopiowanie starą bazę danych do nowego, to jak to dodać Z_ przyrostek do wszystkich tabeli i nazwy kolumn? Ponadto prosi mnie o tworzenie encji i atrybutów, czy jest to możliwe, że można to zrobić automatycznie (z pliku sqlite dabase)?

Dzięki!

+0

Nie, nie ma żadnego automatyczny sposób. Sqlite plik bazy danych utworzony poza Core Data nie jest z nim zgodny. – alhcr

Odpowiedz

2

ten odpowiada tutaj może być przydatna (kopalnia jest jednym z nich)

Pre-populate Core Data

/** 
Returns the path to the application's Documents directory. 
*/ 
     - (NSString *)applicationDocumentsDirectory { 
      return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
     } 

sample code

+0

Dzięki, ale [self applicationDocumentsDirectory] stringByAppendingPathComponent wydaje się nie istnieć, używam XCode 4.3 – hzxu

+0

Czy muszę też najpierw tworzyć encje/atrybuty przed wykonaniem tego, co jest widoczne w kodzie? Dzięki! – hzxu

+0

@hzxu ta metoda jest po prostu wygodną metodą, właśnie edytowałem moje pytanie, aby ją uwzględnić. –

0
// Returns the persistent store coordinator for the application. 
// If the coordinator doesn't already exist, it is created and the application's store added to it. 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) 
    { 
     return _persistentStoreCoordinator; 
    } 

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

    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"yourSqlite.sqlite" ofType:nil]; 

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSError *error = nil; 

    if (![[NSFileManager defaultManager] fileExistsAtPath:[documentsDirectory stringByAppendingPathComponent:@"yourSqlite.sqlite"] ]) { 

     if([[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:[documentsDirectory stringByAppendingPathComponent:@"yourSqlite.sqlite"] error:&error]){ 
      NSLog(@"Default file successfully copied over."); 
     } else { 
      NSLog(@"Error description-%@ \n", [error localizedDescription]); 
      NSLog(@"Error reason-%@", [error localizedFailureReason]); 
     } 
    } 

    _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; 
} 
Powiązane problemy