Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次重新启动iPhone应用程序时,NSHomeDirectory返回不同的路径_Iphone_Objective C_Iphone Sdk 3.0 - Fatal编程技术网

每次重新启动iPhone应用程序时,NSHomeDirectory返回不同的路径

每次重新启动iPhone应用程序时,NSHomeDirectory返回不同的路径,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我注意到,每当我用Xcode重新启动应用程序时,NSHomeDirectory都会返回不同的路径,显然,即使我手动单击图标,因为它不会加载文件的内容。每次我重新启动应用程序时,它都会给我一个不同的目录,这让我大吃一惊。这在模拟器和设备上都会发生,即使我使用“ForUser”方法。我的电话是这样的: NSString* fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"test.file"]; 或 甚至 NSString

我注意到,每当我用Xcode重新启动应用程序时,NSHomeDirectory都会返回不同的路径,显然,即使我手动单击图标,因为它不会加载文件的内容。每次我重新启动应用程序时,它都会给我一个不同的目录,这让我大吃一惊。这在模拟器和设备上都会发生,即使我使用“ForUser”方法。我的电话是这样的:

NSString* fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"test.file"];

甚至

NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"test.file"];
两个应用程序启动的日志如下所示,请注意GUID部分是如何更改的:

loadCharacters: /var/mobile/Applications/ABE7E33E-439B-4258-8FC1-127A3CD00D87/test.file
loadCharacters: /var/mobile/Applications/71C02507-6347-4693-8CC1-537BE223179E/test.file
我做错了什么,或者我错过了什么

解决方案:

起初,我保存到NSHomeDirectory本身,而不是“Documents”子目录。由于应用程序目录随每次部署而更改,但仅复制“Documents”目录中的文件,因此每次部署后保存的文件都会丢失。然后我使用了“Documents”文件夹,但有人建议我可能应该把它放在“Documents”的子文件夹中。我只是这样做了,但忘记创建文件夹,因此文件没有保存。这一次我失败了两次。:)


只需保存到nshomeditory()+“Documents/test.file”就可以了。

这样做是正确的。每次将应用程序安装到模拟器或设备中时,它都会被放在不同的目录中(我不知道为什么,但情况就是这样)。但是,它的所有目录结构都被移动到新位置。因此,您的相对路径将保持不变。

应用程序主目录的GUID部分似乎只是一个随机UUID(如第三组以“4”开头的十六进制数字和第四组以“8”、“9”、“a”或“B”开头的十六进制数字所示。如果您想了解更多关于UUID和唯一id的一般信息,请参阅“通用唯一标识符”上的wikipedia条目。在目录路径中使用唯一id的原因只是为了分隔一个应用程序(以及同一应用程序的多个部门)作为沙箱(IMHO)的一部分,相互进行.

那么,我如何才能以这种方式测试保存/加载?没错,我知道它可以工作,因为每次保存后我都会加载。但是,当我构建一个特别的分布式版本时,仍然会出现不同的路径。如果由于这个问题,保存/加载对测试人员不起作用,我如何证明它可以工作?换句话说,我的测试人员无法验证有效的保存/加载系统。您所说的保存/加载是什么意思?您保存的所有数据都应该在那里,以便下次安装时加载。它可能在那里,但文件的路径已更改。那么我如何访问它?或者这些数据应该通过iPhone SDK/Xcode在每次部署时自动复制?如果是,则不会发生这种情况。请随时访问如果需要,请在文档中创建目录结构。另请参阅&
loadCharacters: /var/mobile/Applications/ABE7E33E-439B-4258-8FC1-127A3CD00D87/test.file
loadCharacters: /var/mobile/Applications/71C02507-6347-4693-8CC1-537BE223179E/test.file