【问题标题】:sqlite works on simulator, but not on devicesqlite 适用于模拟器,但不适用于设备
【发布时间】:2011-03-20 04:46:22
【问题描述】:

我有一个问题,我无法让我的 sqlite 数据库在 ipad 设备上工作/打开。在模拟器上一切正常,但不是真正的设备。当我想在设备上测试但无法加载时,我将 MODE 设置为 NO。

    sqlite3 *database;
if (MODE) { //Simulator
    result = sqlite3_open("/Users/userID/Myapp/VRdb.sqlite", &database);
} else { // On device
    result = sqlite3_open([databasePath UTF8String], &database);
}

if(result != SQLITE_OK)
{
    sqlite3_close(database);
    view = [[UIAlertView alloc]
            initWithTitle: @"Database Error"
            message: @"Failed to open database."
            delegate: self
            cancelButtonTitle: @"OK" otherButtonTitles: nil];
    [view show];
    [view autorelease];

}

databasePath 获取方式:

databasePath = [[NSBundle mainBundle] pathForResource:@"VRdb" ofType:@"sqlite"];

我有什么遗漏的吗????

【问题讨论】:

    标签: objective-c cocoa sqlite ios-simulator


    【解决方案1】:

    在那个路径上真的有文件吗?虽然 sqlite3_open() 函数会在文件不存在时创建文件,但您不能在应用程序包中创建文件(权限)。该文件实际上必须已经存在并在构建时作为资源复制到包中,然后用作模板以复制到文档文件夹等可写区域。

    (感谢彼得让我意识到我的答案不完整 :-))

    【讨论】:

    • awlcs:如果您打算创建可写数据库,最好的方法是获取 Documents 目录的路径并使用它。无论您是否在模拟器上运行,您都可以并且应该无条件地这样做。事实上,我建议不要在模拟器行为和设备行为之间造成比你所面临的更多的差异。
    • 谢谢你们,我会试一试的。我认为使用 NSBundle 就足够了,但我错了 :)
    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2011-03-08
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多