iOS模拟器重新创建sql数据库/表

问题描述:

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

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

什么是'[文件管理copyItemAtPath:databasePath toPath:databasePath错误:零];'怎么办呢?你只是错过了从你的应用程序包复制数据库文件到你的应用程序的文档目录(它保留了应用程序更新) – luk2302

没有足够的声望发表评论,但如果你没有收到任何没有找到文件消息在你的日志中,那么我不认为这是导致问题的代码块。你确实在做插入查询到数据库中,而不是更新?另外,是你的选择查询返回所有行,而不仅仅是一个。您是通过XCode运行还是直接在模拟器?如果你只是经过那里运行它的XCode可能覆盖文件 - 尝试重新运行在模拟器上的应用程序(CMD + + ^h才能到主屏幕),如果眼见有什么区别。

+0

感谢回答!我只是从模拟器重新运行应用程序,一切正常。看起来XCode是有罪的。如果您知道如何为每个新的XCode运行保存数据库 - 我会很高兴!但你已经帮了我很多了!谢谢。 –

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

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

这不会在应用程序的更新期间持续存在。在设备上更新应用时,您会看到相同的问题。

相反,使用一个持久位置,如:

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