iOS 模拟器重新创建 sql database/table

iOS Simulator recreates sql database/table

我正在使用 XCode 6.4 和 iOS Si,mulator iPhone 6。我的应用程序数据库或 table 的每个 运行 都会重新创建,因此我丢失了所有以前插入的数据。我有 1 个数据库,里面有 1 个 table。数据库文件位于项目的 Supporting Files 目录中。这是数据库初始化的代码:

    BOOL success;
    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];
    if (success) {
        NSLog(@"exists");
        return;
    } else {
        NSLog(@"No file found");
        [fileManager copyItemAtPath:databasePath toPath:databasePath error:nil];
    }

On 运行 - 成功变量是 YES - 所以我在日志中看到 "exists"。之后,我将一项插入到我的 table 并执行 select 查询 returns 这一项插入原始。在下一个 运行 上,我应该看到两行,但又只有一行 - 所以我假设 table 已重新创建。我需要帮助解决这个问题。

没有足够的声誉来发表评论,但是如果您在日志中没有收到任何 找不到文件 消息,那么我认为这不是代码块那是导致问题的原因。您确定要对数据库执行 Insert 查询而不是 Update 吗?此外,您的 Select 查询是否返回所有行而不仅仅是一行。您是 运行 通过 XCode 还是直接在 Simulator 中? XCode 如果您 运行 它可能会覆盖文件 - 尝试重新 运行 模拟器中的应用程序(CMD + Shift + H 进入主屏幕),看看是否有任何区别。

这不是模拟器或 Xcode 中的错误。您的应用程序中存在错误,而不是模拟器本身。您不应在此位置修改数据库:

[[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"];

这在应用程序的更新中不是持久的。在设备上更新您的应用程序时,您会看到同样的问题。

而是使用固定位置,例如:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [directories firstObject];