FMDatabase: подключить БД, сделанную заранее

Я заранее создал файл базы данных sample.db с помощью терминала и добавил файл в проект.
Но приложение создает файл базы данных с нуля, вместо того, чтобы ссылаться на добавленную базу данных.
Как мне нужно исправить, чтобы ссылаться на базу данных добавлен?

NSArray* paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString* dir = [paths objectAtIndex:0];
FMDatabase* db = [FMDatabase databaseWithPath:[dir stringByAppendingPathComponent:samble.db]];
[db open];

person kusumoto_teruya    schedule 06.04.2014    source источник


Ответы (1)


Проверьте наличие базы данных в папке «Документы», прежде чем пытаться ее открыть, и если ее там нет, то скопируйте версию из комплекта в папку «Документы», прежде чем открывать ее из папки «Документы».

Итак, во-первых, поскольку у вас есть пустая база данных в папке «Документы», удалите ее (удалив приложение, а затем переустановив). И тогда вы можете сделать что-то вроде следующего

BOOL success;
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* dir = [paths objectAtIndex:0];
NSString* documentsPath = [dir stringByAppendingPathComponent:@"samble.db"];
NSFileManager* fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath:documentsPath]) {
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"samble" ofType:@"db"];
    NSAssert(bundlePath, @"%s: database not found in bundle", __FUNCTION__);

    NSError *copyError;
    success = [fileManager copyItemAtPath:bundlePath toPath:documentsPath error:&copyError];
    NSAssert(success, @"%s: copyItemAtPath failed: %@", __FUNCTION__, copyError);
}

FMDatabase* db = [FMDatabase databaseWithPath:documentsPath];
NSAssert(db, @"%s: databaseWithPath failed", __FUNCTION__);
success = [db open];
NSAssert(success, @"%s: open failed", __FUNCTION__);
person Rob    schedule 06.04.2014
comment
Спасибо за ответ во второй раз. - person kusumoto_teruya; 07.04.2014