Как импортировать ранее существующий sqlite файл в Core Data?
Мне нужно импортировать файл .sqlite в Core Data, я искал в Интернете и нашел:
Учебное пособие по основным данным: как предварительно загрузить/импортировать существующие данные
Он создает Python script для заполнения этой базы данных путем чтения содержимого нашей старой базы данных и создания соответствующих строк в новой базе данных. Но моя база данных sqlite слишком велика с точки зрения количества таблиц и столбцов, это может стоить значительного количества времени.
Я также нашел это:
Использование предварительно заполненной базы данных SQLite с основными данными на iPhone OS 3.0
Но я не совсем понимаю, похоже, что он копирует старую базу данных в новую, то как она добавляет суффикс Z_ ко всем именам таблиц и столбцов? Кроме того, он просит меня создавать сущности и атрибуты, все равно это можно сделать автоматически (из файла sqlite dabase)?
Спасибо!
Ответы
Ответ 1
Это ответы здесь могут быть полезными (мой - один из них)
Предварительно заполнить основные данные
/**
Returns the path to the application Documents directory.
*/
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
пример кода
Ответ 2
// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and the application 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;
}