Как я могу изменить sqlite ReadOnly на ReadWrite на iPhone? - PullRequest
1 голос
/ 09 ноября 2009

Я развернул приложение на своем iPhone и получил

Unknown error calling sqlite3_step (8: attempt to write a readonly database) eu при вставке / обновлении выписок.

На симуляторе все работает как надо.

Моя база данных sqlite помещается в папку ресурсов (Xcode).

Спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 09 ноября 2009

Ваш комплект приложений не доступен для записи на iPhone. Вы ДОЛЖНЫ скопировать файл в другое место, например, в папку с документами. Он работает в симуляторе, потому что Mac не обеспечивает все ограничения песочницы, которые делает iPhone.

1 голос
/ 10 ноября 2009

Вы можете скопировать свою базу данных из каталога комплектов приложений в каталог документов в viewDidLoad. После этого вы можете читать / писать из / в вашу базу данных в каталоге Documents. Конечно, вам нужно проверить, существует ли база данных в каталоге «Документы», прежде чем выполнять копирование, чтобы не перезаписывать ее при следующем запуске приложения.

Предполагается, что вы определили имя своей базы данных '#define kFilename @ "yourdatabase.db"' в файле .m.

В viewDidLoad добавить:


// Get the path to the main bundle resource directory.

NSString *pathsToReources = [[NSBundle mainBundle] resourcePath];

NSString *yourOriginalDatabasePath = [pathsToResources stringByAppendingPathComponent:kFilename];

// Create the path to the database in the Documents directory.

NSArray *pathsToDocuments = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [pathsToDocuments objectAtIndex:0];

NSString *yourNewDatabasePath = [documentsDirectory stringByAppendingPathComponent:kFilename];

if (![[NSFileManager defaultManager] isReadableFileAtPath:yourNewDatabasePath]) {

if ([[NSFileManager defaultManager] copyItemAtPath:yourOriginalDatabasePath toPath:yourNewDatabasePath error:NULL] != YES)

NSAssert2(0, @"Fail to copy database from %@ to %@", yourOriginalDatabasePath, yourNewDatabasePath);

}

Удачи!

АОБ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...