Вы можете ознакомиться со списком кодов ошибок sqlite3 как часть документации API sqlite3 (http://www.sqlite.org/c3ref/c_abort.html. Код ошибки 8: SQLITE_READONLY
(«Попытка записи базы данных только для чтения»).
Как вы, вероятно, знаете, приложения для песочницы iOS работают на устройстве, поэтому вы должны обязательно создать базу данных в одной из областей, которые ОС предоставляет для создания файлов, доступных для записи приложения.
Есть достойное руководство по настройке проекта sqlite3 на iOS http://icodeblog.com/2008/08/19/iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1/.
Из этого руководства наиболее важной частью вашей проблемы является, вероятно, метод createEditableCopyOfDatabaseIfNeeded
в делегате приложения. Это показывает, как вы можете обеспечить создание редактируемого файла базы данных при первом запуске приложения:
(Обратите внимание, это не мой код ... Я воспроизводлю его из учебника на icodeblog.com, где подробно объясняется)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[self createEditableCopyOfDatabaseIfNeeded];
[self initializeDatabase];
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
// Creates a writable copy of the bundled default database in the application Documents directory.
- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"todo.sqlite"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"todo.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}