2

我读到我应该在这条路径中找到我的 sqlite db:

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

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

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

1 回答 1

0

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

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

为此,您可以使用:

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]应该指向文档目录而不是资源)。

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

希望这可以帮助 :)

于 2012-05-23T15:02:59.437 回答