0

这是我第一次尝试在 iOS 中创建和访问 SQLite 数据库,我按照教程进行操作,但我无法完成这项工作。这些是我遵循的步骤:

  1. 通过 Firefox 插件(“testDatabase”)和一个包含几列的表(“testTable”)创建了一个数据库
  2. 将“testDatabase.sqlite”文件保存在目录中
  3. 将此类文件拖放到我的 Xcode 项目中的“支持文件”组中
  4. 在 Build Phases > Link Binary With Libraries 中添加了“libsqlite3.dylib”
  5. 在 Build Settings > Linking > Other Linker Flags > Debug and Release 中添加了“-lsqlite3”
  6. 在一个 ViewController 中,调用了这个方法:

    -(NSString *)copyDatabaseToDocuments {
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testDatabase.sqlite"];
        if ( ![fileManager fileExistsAtPath:filePath] ) {
        NSString *bundlePath = [[[NSBundle mainBundle] resourcePath]
                                stringByAppendingPathComponent:@"testDatabase.sqlite"];
            [fileManager copyItemAtPath:bundlePath toPath:filePath error:nil];
        }
        return filePath;
    }
    
  7. 然后,尝试在数据库中写入:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testDatabase.sqlite"];
    sqlite3 *database;
    
    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
        const char *sqlStatement = "insert into testTable (id) VALUES (?)";
        sqlite3_stmt *compiledStatement;
    
        if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
    
            sqlite3_bind_int(compiledStatement, 1, newObject.ID);
        }
    
        if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
                sqlite3_finalize(compiledStatement);
        }
    }
    sqlite3_close(database);
    

我已经阅读了几篇关于类似错误的帖子,但我尝试过的所有内容都没有对我有用......我也尝试过,NSString *filePath = [[NSBundle mainBundle] pathForResource:@"testDatabase" ofType:@"sqlite"];但它是空的,并且在模拟器中多次低估和重新部署我的应用程序......

提前致谢

4

1 回答 1

2

我终于通过简单地删除 /Users/[user]/Library/Application Support/iPhone Simulator/5.1/Applications/中生成的应用程序文件夹来完成这项工作,以便在运行模拟器时再次创建

于 2012-10-15T06:59:12.410 回答