iphone - 模拟器中的文档文件夹为空。我的 db.sqlite 在哪里?

标签 iphone xcode sqlite documents

我读到我应该在这个路径中找到我的 sqlite 数据库:

~/库/应用程序支持/iPhone模拟器/您的IOS版本/应用程序/您的应用程序的唯一 key /文档

但是该文件夹是空的。当我在模拟器中运行我的应用程序时,我可以查询数据库。 该数据库最初位于我的应用程序的资源文件夹中。

我正在使用 xcode 3.2.6 和 OS X 10.6.8

还有其他地方可以找到吗?

非常感谢。 拉波

-(void)insertError:(Frage *) f 
           answer2:(NSString *) answer2 
           answer3:(NSString *) answer3 
 {

    int resconn = sqlite3_open([pathDB UTF8String], &database);

    if (resconn == SQLITE_OK) {

        NSString * sql = @"Insert into errors (id, answer2,answer3) values (?,?,?)";
        const char * sqlStatement = [sql UTF8String];

        sqlite3_stmt * compiledStatement;

        if (sqlite3_prepare_v2(database, sqlStatement, -1 , &compiledStatement, NULL) == SQLITE_OK) {
            sqlite3_bind_text(compiledStatement, 1, [f.id UTF8String], -1 , SQLITE_TRANSIENT);
            sqlite3_bind_int(compiledStatement, 2, [answer2 intValue]);
            sqlite3_bind_int(compiledStatement, 3, [answer3 intValue]);
        } 
        if (!sqlite3_step(compiledStatement) == SQLITE_DONE) {
            //
        }   
        sqlite3_finalize(compiledStatement);

    }
    sqlite3_close(database);
}

最佳答案

为了访问应用程序文档文件夹中的资源数据库,您首先需要在应用程序启动时将其复制到那里。

如果数据库文件位于 xcode 项目的 resources 文件夹中,则不会自动将其复制到应用程序的文档目录中。

为此,您可以使用:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSError *error;

NSString *databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_DB_IN_RESOURCES"];

[[NSFileManager defaultManager] copyItemAtPath:databasePath 
                                                toPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,@"YOUR_DB"]
                                                 error:&error];

然后,您将能够使用现有代码访问文档文件夹中的数据库([pathDB UTF8String] 应指向文档目录而不是资源)。

正如您所提到的,您仍然可以使用资源中的数据库,但每次重新启动应用程序时它都会被删除。诀窍是将数据库复制到您的文档文件夹中,它将保留在该文件夹中,直到从设备中手动删除应用程序为止(在应用程序更新期间也会保留文档文件夹,因此当用户更新应用程序时您的数据库仍然存在)。

希望这有帮助:)

关于iphone - 模拟器中的文档文件夹为空。我的 db.sqlite 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715865/

相关文章:

swift - 在用户购买之前锁定游戏的特定部分

xcode - 快速的 GLKit 不显示任何内容?

iphone - 我想知道我的应用程序如何访问 ios 应用程序中的 SQLite 数据库

SQLite 从另一列中引用命名列

iphone - 我的spriteSheet动画使我的应用崩溃

iphone - Bootstrap 3 单选按钮不适用于 iPhone 上的 fastclick

ios - 如何将 UIView 转换为横向和全屏?

c++ - 如何在没有 Boost 的情况下在 Xcode C++11 中独立使用 Asio

visual-studio-2010 - 安装后报告缺少 System.Data.SQLite.dll

iphone - iPhone OS > 用户界面的 Window XIB 和 View XIB 模板之间的区别在哪里?