我是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];
答案 0 :(得分:0)
上面代码中的第6行显示名称为inventory_db.sqlite,因此这是您的应用将使用的文件。您需要修改它以使用新的数据库名称。请注意,通过修改数据库,您可能会产生意外结果,因此您需要管理应用程序正在使用的数据库版本,并根据需要进行数据更正。这是Core Data可以提供帮助的一个很好的功能。
答案 1 :(得分:0)
根据您的陈述,似乎旧的DB被缓存到您的模拟器中。请通过
重置您的模拟器iOS模拟器 - >重置内容和设置
它应该有用......