我的问题与以下三个问题有关。
iPhone What happens to previous data when app is upgraded to new version
Preventing erasure of user data while upgrading iOS application via iTunes
以下是我的两个问题。
我是否应该在文件系统上手动创建“文档”目录,或者在xcode中只创建一个“组”,这样当应用程序升级时,数据会保持不变?
如何在模拟器或iPhone上的应用开发过程中测试应用持久性?
感谢。
答案 0 :(得分:3)
都不是。安装应用程序时,将为您创建Documents目录。您可以使用以下方式获取它的路径:
NSString *docuDir = nil;
NSArray *list = NSSearchPathForDirectoriesInDomains(
NSDocumentsDirectory, NSUserDomainMask, YES/*expand tilde*/);
if ([list count]) docuDir = [list objectAtIndex:0U];
正如@Ben所说,只有在您明确卸载应用程序时才删除该目录(从Springboard中删除它)。在构建和运行时,Xcode可以有效地对您的应用进行就地升级。如果一切都完好无损(并且没有理由不会),你应该没事。
答案 1 :(得分:1)
升级应用程序后,您的Documents文件夹保持不变。您可以在第一次运行应用程序时将文件复制到Documents目录中,例如sqlite文件,显然只有在它尚不存在时才会复制。如果您使用CoreData,它将自动将数据存储在那里。如果数据架构在升级时发生更改,则需要能够运行迁移脚本,因此请记住这一点。 CoreData具有迁移功能,可以为您处理此问题,当然您也可以手动执行此操作。
当您在模拟器中运行应用程序时,它还会保留Documents目录,因此您必须从模拟器中删除该应用程序以模拟全新安装。由于Documents文件夹是在首次运行的“全新安装”中创建的,因此只需运行代码即可模拟升级。
答案 2 :(得分:1)
另一种方法是查看Documents文件夹。如果您在模拟器中运行您的应用程序,那么您的应用程序的Documents文件夹将具有以下路径:
/ Users / itsaboutcode / Library / Application Support / iPhone Simulator / 4.1 / Applications / SOME_LONG_HEX_KEY_THAT_MAPS_TO_YOUR_APP /
如果您正在iDevice上进行测试,请使用Xcode的Organizer窗口的Summary选项卡。在底部有一个名为Applications的部分。你的应用程序将接近该列表的顶部,它将有一个切换三角形 - 你将点击它。这将显示“应用程序数据”,可以通过单击向右的向下箭头下载。
iPhone模拟器的优点是可以随意修改Documents文件夹及其内容。 iDevice上的应用程序数据是只读的(当然,除了您的应用程序在运行时)。