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

时间:2012-05-23 08:06:40

标签: iphone xcode sqlite documents

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

〜/ Library / Application Support / iPhone Simulator / YOUR-IOS-VERSION / Applications / UNIQUE-KEY-FOR-YOUR-APP / Documents

但文件夹是空的。当我在模拟器中运行我的应用程序时,我能够查询数据库。 db最初位于我的应用程序的resources文件夹中。

我正在使用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);
}

1 个答案:

答案 0 :(得分:0)

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

如果数据库文件位于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]应该指向文档目录而不是资源)。

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

希望这会有所帮助:)