我有更新的版本应用程序更新到应用程序商店,但由于有一些过时的数据:例如数据库和一些我不需要在较新版本中的文件或某些数据库使用与较新版本相同的名称但数据库结构不同,有没有办法在用户进行更新时删除上一版本的所有个人数据?然后,在用户更新我的应用后,该应用感觉就像一个全新的应用。
答案 0 :(得分:2)
一举删除应用程序沙箱的全部内容,这是用户只需删除并重新安装应用程序即可实现的。
这里有两件事需要考虑:
NSFileManager
方法明确删除它们。特别是removeItemAtPath:error:
。 Class Reference非常有帮助。答案 1 :(得分:2)
您可以遵循一种模式。
假设您的db名为MySqliteDatabase.sqlite。 Documents目录中还有一些其他数据,但您不想在第一次安装下一个版本时使用它并将其删除。
使用新版本,将db重命名为MySqliteDatabasev2.sqlite。在appstartup上,使用NSFileManager在文档目录中查找MySqliteDatabasev2.sqlite。如果它不存在,请吹走文档目录并在那里复制My SqliteDatabasev2.sqlite。
对于任何后续启动,上述逻辑将找到v2数据,并且不会对文档目录执行任何操作。
对于任何后续版本升级,您可以按照此方案更新数据库名称。
请注意:请务必更改其余代码以使用新名称。最好的做法是在一些commons头文件中定义它(我在每个项目中都有一个commons.h)
#define DB_NAME @"MySqliteDbv2.sqlite"
然后确保您只使用DB_NAME,而不是其他任何内容。因此,只要版本更改: 1.在xcode导航器中重命名db文件。 2.重命名DB_NAME define。
就是这样。
答案 2 :(得分:0)
在应用启动时,您只需删除整个商店文件即可。
NSString *path = <path to your file>
[[NSFileManager defaultManager] removeItemAtPath:[self persistentStorePath] error:nil];
您可以使用此代码获取文档目录的路径,如果这是您存储数据的位置。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[[paths lastObject] stringByAppendingPathComponent:@"subdirectoryIfAny"]
stringByAppendingPathComponent:@"name of your .sql or whatever"];
如果您不想吹走所有数据,那么您已经读入了要删除的记录,然后手动删除它们。