我正在编写的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运行的设备上运行正常('flds'文件夹'test.txt'和空子文件夹被成功复制),但不是在通过iTunes同步时(仅'flds'文件夹)复制'test.txt',而不是子文件夹)。这真的是copyItemAtPath:toPath:error:
的预期行为吗?为什么在通过iTunes同步后它会有不同的表现?
答案 0 :(得分:0)
最后我发现copyItemAtPath:toPath:error:
不会复制空文件夹,即使我认为它应该是。再次,这种行为只有在通过iTunes将应用程序同步到iPad后才会发生(从Xcode运行时它会复制空文件夹)。我暂时的解决方案是简单地在每个子文件夹中放置一个虚拟文本文件,这样它们就不再是空的了。