iPhone模拟器上的sqlite3与设备权限?

时间:2010-04-19 00:26:36

标签: iphone resources sqlite database-permissions

好的,现在我在模拟器上完成了开发,当我在测试设备上安装时,我收到了错误

  

尝试编写只读数据库

控制数据库访问的设置有哪些?部署后这会难以管理吗?

更多信息......我想我知道发生了什么......当我寻找我的数据库时,它与教程的路径不同。我喜欢做的是在项目的“内容”的根文件夹下面有一个组。我在我定义的路径下添加了此组中的JustADatabase.sqlite文件。由于并非所有路径都是可写的,我猜想我的用户创建的路径在安装时是不可写的。

我相信有一种方法可以使用构建/复制脚本将文件安装在正确的位置。

你认为这是问题吗?您是否知道如何编写修复程序脚本或如何将文件放在项目中的正确位置以便正确复制?以下是导致sqlite-open命令的代码,其中“tutorial”路径已注释掉。这适用于读取,可能是写访问拒绝的原因。

- (void)initializeDatabase {

    // ??? NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    // ??? NSString *documentsDirectory = [paths objectAtIndex:0];
    // ??? NSString *pathTutorial = [documentsDirectory stringByAppendingPathComponent: @"JustaDatabase.sqlite"];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"JustaDatabase" ofType:@"sqlite"]; 

    if( sqlite3_open([path UTF8String], &database) == SQLITE_OK ) {
        NSLog(@"%s: opened database %@", __FUNCTION__, path);
    } else {
        NSAssert1(0,@"Failed to open database: '%s'.", sqlite3_errmsg(database));
    }
}

1 个答案:

答案 0 :(得分:1)

sqlite3权限只是文件权限。

您需要将db文件复制到documents目录,因为您无法写入设备上bundle目录中的文件。