在设备上找不到NSBundle文件夹,但在模拟器中工作

hsd*_*dev 5 directory objective-c nsfilemanager nsbundle

我正在写的iPad应用程序有一个非常奇怪的问题.在启动时,我想将包含一些其他文件夹(空的)的文件夹从应用程序包复制到Documents目录.要复制的文件夹,称为"flds"(全部小写),使用"为任何添加的文件夹创建文件夹引用"添加到Xcode 4项目中,并且我已经检查它在编译后实际上是.app文件的一部分.(并且在尝试复制时它不存在.)

我尝试使用其中一个调用(它们全部工作)进入'flds'文件夹:

[[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"flds"]
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flds"]
[[NSBundle mainBundle] pathForResource:@"flds" ofType:@""]
Run Code Online (Sandbox Code Playgroud)

然后使用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]
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此路径将文件夹复制到Documents目录中的新位置时,只有文件夹本身和其中的.txt文件(我放在那里作为测试,它实际上不应该在那里)获取复制,而不是6-7个空子文件夹.同样,相同的模式显示自己:在模拟器和从Xcode运行的设备上运行正常('flds'文件夹'test.txt'和空子文件夹被成功复制),但不是在通过iTunes同步时(仅'flds'文件夹)复制'test.txt',而不是子文件夹).这真的是预期的行为copyItemAtPath:toPath:error:吗?为什么在通过iTunes同步后它会有不同的表现?

hsd*_*dev 0

最后我发现它copyItemAtPath:toPath:error:不会复制空文件夹,尽管我认为它应该这样做。同样,这种行为仅在通过 iTunes 将应用程序同步到 iPad 后才会发生(当从 Xcode 运行时,它确实复制了空文件夹)。我暂时的解决方案是简单地在每个子文件夹中放置一个虚拟文本文件,以便它们不再是空的。