Скопируйте базу данных SQLite из URL в локальный путь - PullRequest
0 голосов
/ 03 июля 2011

Что я могу использовать для копирования удаленной базы данных в локальный путь?

success = [FileManager copyItemAtURL:dbPath toPath:databasePath error: &error];

Очевидно, что вышеописанное не будет работать.Глядя на руководство, кажется, что вы можете скопировать путь к пути или URL к URL.Но я видел пример myapp: //path/to/documents/database.sql.Теперь я смущен.Может ли кто-нибудь указать мне правильное направление?

Это то, что я делаю сейчас ... но это не перезаписывает базу данных, или я делаю вещи в неправильном порядке.Файл тоже всего пару килобайт.

- (void)createDB {
BOOL success;
NSError *error;

NSData *fetchedData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.dot.com/book/book.sqlite"]];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"book.sqlite"];
[fetchedData writeToFile:filePath atomically:YES];
NSLog(@"%@", filePath);

NSFileManager *FileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingString:@"book.sqlite"];
success = [FileManager fileExistsAtPath:databasePath];
if(success)return;
NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"book.sqlite"];
success = [FileManager copyItemAtPath:dbPath toPath:databasePath error: &error];
if(!success)
    NSAssert1(0, @"Failed to copy database. Error: %@", [error localizedDescription]);
}

1 Ответ

0 голосов
/ 03 июля 2011

вижу по линии,

NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"book.sqlite"];

вы пытаетесь получить базу данных из каталога Resources , но приведенный выше код фактически загружает sqlite непосредственно в каталог Documents НЕ ресурсы (недоступные для записи)

Сбой, потому что в каталоге ресурсов нет book.sqlite. Вам не нужно копировать файл, так как он уже присутствует в каталоге Documents

...