【发布时间】:2011-10-24 12:47:31
【问题描述】:
我正在编写的 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 同步后它的行为会有所不同?
【问题讨论】:
-
我不确定您是否尝试过此操作,但您是否通过右键单击来检查最终版本(拖到 iTunes 的 .app)捆绑包中是否存在文件夹 flds应用程序并选择显示包内容?您应该能够通过 finder 找到您尝试访问的文件和文件夹。
-
我试过了。文件夹肯定在那里。我还尝试将 .txt 文件放在“flds”的一个子文件夹中并通过 pathForResource:ofType: 访问它,这确实有效。获取文件夹本身不会。
-
请检查您使用的文件是否不在设备上。也许您尝试使用保存在计算机上的文件。如果您不确定,请尝试从另一台计算机打开您的项目,看看它是否有效。
-
我完全确定我没有。请参阅编辑以了解此问题的进一步发展。
-
您是否选中了“目标框”,上面写着**“复制项目目标组的文件夹(如果需要)**?如果没有,则从项目导航中删除该文件并使用复选框已选中。
标签: objective-c directory nsfilemanager nsbundle