我正在使用XCode 6.4和iOS Si,mulator iPhone 6.我的app数据库或表的每次运行都会重新创建,因此我丢失了所有以前插入的数据。我有1个数据库,里面有1个表。数据库文件位于项目的Supporing 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];
}
运行 - 成功变量是YES - 所以我在日志中看到"存在"。之后,我将一个项目插入到我的表中并执行选择查询,返回此项插入原始。在下一次运行时,我应该看到两行,但只有一行 - 所以我假设表被重新创建。我需要帮助解决这个问题。
答案 0 :(得分:0)
没有足够的声誉来评论,但如果您在日志中没有收到任何找不到文件消息,那么我不认为这是代码块造成了这个问题。您是否肯定在数据库中执行插入查询而不是更新?此外,您的选择查询是返回所有行而不仅仅是一行。您是通过 XCode 还是直接在模拟器中运行? XCode 可能会覆盖文件,如果您只是在那里运行它 - 尝试在模拟器中重新运行应用程序( CMD + Shift + H 进入主屏幕),看看是否有任何区别。
答案 1 :(得分:0)
这不是模拟器或Xcode中的错误。您的应用中存在错误,而不是模拟器本身。您不应该在此位置修改数据库:
[[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"];
在应用程序的更新中,这不是持久的。在设备上更新应用时,您会看到同样的问题。
相反,请使用持久性位置,例如:
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [directories firstObject];