2012-08-28 112 views
2

我在我的应用程序的第一个版本中使用sqlite来存储一些数据,现在我必须更改某些表的结构。苹果是否删除iTunes上的应用程序更新核心数据?

请注意,我之前发布了新版本,并注意到数据库在更新后被删除,因为我没有在更新后看到数据库记录,并且它开始再次注册行。

我的问题是我需要处理更新表删除,以及为什么苹果删除以前的更新表中?

回答

2

这取决于您的数据库文件的名称,表名称和位置。

从Apple的编程指南: 当用户下载应用程序更新时,iTunes将更新安装在新的应用程序目录中。然后在删除旧安装之前,将用户的数据文件从旧安装移到新的应用目录。在下面的目录中的文件保证在更新过程中被保留:

<Application_Home>/Documents 
<Application_Home>/Library 

虽然在其他用户目录中的文件也可在移动,你不应该依赖于他们是在更新后出现。

参考:http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

+0

NSString * docsDir; NSArray * dirPaths; //获取文档目录 dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); docsDir = [dirPaths objectAtIndex:0]; //构建数据库文件的路径 databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@“places.db”]]; NSFileManager * filemgr = [NSFileManager defaultManager]; if([filemgr fileExistsAtPath:databasePath] == NO){const char * dbpath = [databasePath UTF8String]; if(sqlite3_open(dbpath,&placesDB)== SQLITE_OK){//创建数据库} –

+0

以上是我创建数据库的代码,因为了解我的数据库不会在更新时删除,这是真正的消耗吗? –

+0

看起来很好。您只在文档目录中创建数据库。你在更新中更改了数据库名称,表名或表结构吗? –

0

有几个可能的原因,为什么你没有看到更新后的任何数据。例如,第二次更新中的代码可能会更改数据库文件的名称或某些表或字段的名称。

原则上,更新后旧的sqlite存储应该存在。

您必须手动对代码迁移进行编码:在更新后首次启动时,创建一个新的商店,从旧商店中读取每个记录并将其保存为新的商店中的新格式。

相关问题