每次重新启动iPhone App时,NSHomeDirectory都会返回不同的路径

时间:2010-01-28 12:51:32

标签: iphone objective-c iphone-sdk-3.0

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

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

NSString* fullPath = [NSHomeDirectoryForUser(@"MrX") 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

我做错了什么,或者我错过了什么?

SOLUTION:

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

只需保存到NSHomeDirectory()+“Documents / test.file”即可。

2 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:0)

应用程序主目录的GUID部分似乎只是一个随机UUID(由第3组十六进制数字开头,以'4'开头,第四组以'8'开头,'9','A '或'B'。如果您想了解更多关于UUID和唯一ID的信息,请参阅维基百科条目'通用唯一标识符'作为一个良好的起点。在目录路径中使用唯一ID的原因只是分开一个应用程序(和同一个应用程序的多个deploments)作为沙盒(恕我直言)的一部分彼此相互作用。