Чтобы получить доступ к базе данных ресурсов в папке «Документы» приложения, сначала необходимо скопировать ее туда при запуске приложения.
Если файл базы данных находится в папке ресурсов в вашем проекте xcode, он не будет автоматически скопирован в каталог документов приложения.
Для этого вы можете использовать:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSError *error;
NSString *databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"person.sqlite3"];
[[NSFileManager defaultManager] copyItemAtPath:databasePath
toPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,@"person.sqlite3"]
error:&error];
После этого вы сможете получить доступ к базе данных, которая сейчас находится в папке документов, используя существующий код.
То, что происходило, состояло в том, что, поскольку существующий файл БД не был скопирован, при вызове databaseWithPath
создается новый пустой файл, поэтому вы получаете ошибку Error 1: no such table: person
.
Из Документация FMDB :
Создание базы данных
База данных FMD создается с путем к файлу базы данных SQLite. это
Путь может быть одним из этих трех:
Путь к файловой системе. Файл не должен существовать на диске. Если оно
не существует, он создан для вас.
Пустая строка (@ ""). Пустая база данных создается во временном местоположении. Эта база данных удалена с подключением базы данных FMD
закрыты.
NULL. База данных в памяти создана. Эта база данных будет
уничтожено с помощью базы данных FMD, соединение закрыто.
FMDatabase * db = [FMDatabase databaseWithPath: @ "/ tmp / tmp.db"];