我正在编写的 iPad 应用程序遇到了一个非常奇怪的问题。在启动时,我想将包含其他几个文件夹(为空)的文件夹从应用程序包复制到 Documents 目录。使用“为任何添加的文件夹创建文件夹引用”将要复制的文件夹称为“flds”(全部小写)添加到 Xcode 4 项目中,并且我在编译后检查它实际上是 .app 文件的一部分。(并且在尝试复制时它并不存在。)
我尝试使用以下任一调用进入“flds”文件夹(它们都有效):
[[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"flds"]
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flds"]
[[NSBundle mainBundle] pathForResource:@"flds" ofType:@""]
然后使用 NSFileManager 的copyItemAtPath:toPath:error:
方法(或使用 URL 而不是路径字符串时的 URL 等效项)进行复制。
所有这些策略都可以在 iPad 模拟器和 iPad 设备上完美运行,但以下例外:当我(成功)为 Ad Hoc 分发构建时,将 .app 和 .mobileprovision 拖到 iTunes 中,同步然后运行应用程序设备,系统不再认为“flds”文件夹存在!我一直在尝试检查这个好几个小时,但没有运气。同样,我完全确定它在模拟器和从 Xcode 运行的设备上都可以工作,但在通过 iTunes 同步时不能。
想法?
我发现以下调用在通过 iTunes 同步 iPad 应用程序后也成功获取了文件夹路径:
[[NSBundle mainBundle] pathForResource:@"flds" ofType:nil inDirectory:nil]
但是,当我使用此路径将文件夹复制到 Documents 目录中的新位置时,只有文件夹本身和其中的 .txt 文件(我把它放在那里作为测试,它实际上不应该在那里)得到复制,而不是 6-7 个空子文件夹。同样,同样的模式也显示出来了:在模拟器和从 Xcode 运行的设备上都可以正常工作(带有“test.txt”的“flds”文件夹和空子文件夹被成功复制),但在通过 iTunes 同步时不能正常工作(只有“flds”文件夹'test.txt' 被复制,而不是子文件夹)。这真的是 的预期行为copyItemAtPath:toPath:error:
吗?为什么通过 iTunes 同步后它的行为会有所不同?