开发者

How can i change sqlite ReadOnly to ReadWrite on the iPhone?

i deployed my App to my iPhone and get

Unknown error calling sqlite3_step (8: attempt to write a readonly database) eu on Insert开发者_C百科 / Update Statements.

On the Simulator it all works like it should.

My sqlite Database is placed in the Resource Folder (Xcode).

Thanks for help!


Your application bundle is not writable on the iPhone. You MUST copy the file somewhere else, like your documents folder. It works in the simulator because the Mac does not enforce all the sandboxing restrictions the iPhone does.


You can copy your database from the application bundle directory to the Documents directory in viewDidLoad. You can read/write from/to your database in the Documents directory after this. Of course, you need to check if the database in the Documents directory exist before you do the copy in order not to overwrite it the next time you bring up the app.

Assuming you have defined your database name '#define kFilename @"yourdatabase.db"' in the .m file.

In viewDidLoad add:


// 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);

}

Good luck!

aobs

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜