ios:在哪里把Sqlite文件放在解决方案中?

时间:2014-09-02 16:13:12

标签: ios objective-c iphone sqlite ipad

我是iOS开发的新手,我在使用Sqlite的应用程序中进行更改。我要在一些表中添加一些新字段,我用软件浏览数据库并在其中添加新字段 inventory_db_src.sqlite 但是当我在模拟器中看到它使用 inventory_db.sqlite 这很奇怪,因为解决方案中没有 inventory_db.sqlite 文件代码通过SQL脚本创建DB。如果我调试代码,它会成功获取 inventory_db.sqlite 路径,并且永远不会执行 inventory_db_src.sqlite 行并将inventory_db.sqlite放入模拟器中我的新字段不存在这些在 inventory_db_src.sqlite 中。 pLease帮帮我

BOOL success;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"inventory_db.sqlite"];
        //      [fileManager removeItemAtPath:dbPath error:nil];
        success = [fileManager fileExistsAtPath:dbPath];
        success = NO;

        if (success) {
            int savedVersion = [[NSUserDefaults standardUserDefaults] integerForKey:kVERSION_KEY];
            if (kCURRENT_DB_VERSION != savedVersion) {
                [fileManager removeItemAtPath:dbPath error:nil];
                success = NO;
            }
        }
        if (!success) {
            // The writable database does not exist, so copy the default to the appropriate location.
            NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"inventory_db_src.sqlite"];
            success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
            if (!success) {
                NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
            }
        }

        _INVENTORY_DB = [[FMDatabase alloc] initWithPath:dbPath]; 

2 个答案:

答案 0 :(得分:0)

上面代码中的第6行显示名称为inventory_db.sqlite,因此这是您的应用将使用的文件。您需要修改它以使用新的数据库名称。请注意,通过修改数据库,您可能会产生意外结果,因此您需要管理应用程序正在使用的数据库版本,并根据需要进行数据更正。这是Core Data可以提供帮助的一个很好的功能。

答案 1 :(得分:0)

根据您的陈述,似乎旧的DB被缓存到您的模拟器中。请通过

重置您的模拟器
  

iOS模拟器 - >重置内容和设置

它应该有用......