0

我正在使用以下方法来初始化 viewDidLoad 中的捆绑对象。

documentBundle = [[NSBundle alloc] initWithPath:path];

路径如下所示;

/Users/..../Library/Application Support/iPhone Simulator/6.1/Applications/B69B8A03-C029-4DF5-89E0-1429E73E840F/Documents/Downloads/documents.bundle

在应用程序运行时,我需要更新documents.bundle 并摆脱旧的。所以我删除它并从网上下载最新的。我已经确认包对象指向同一个文件夹,但是在我替换现有文件夹后,它无法获取该包中的内容。如果我重新启动应用程序,我会得到最新的内容!我不确定这里发生了什么。有人能指出什么可能是错的吗?

在我更换捆绑包后,以下返回 Nil 路径!我可以从终端看到所需的文件就在那里!

NSString *path = [documentBundle pathForResource:filename ofType:extension];

我还尝试在替换 bundle 后重新初始化 bundle 对象,但它仍然指向相同的内存地址(使用 %p 打印)并且不从新 bundle 返回任何内容。

我在设备和模拟器上都得到了相同的结果。

4

1 回答 1

0

似乎 NSBundle 在对象实例化期间记住了文件系统。之后,它无法识别添加到该文件夹​​的任何新文件!如果您删除文件夹并重新创建具有相同名称的新文件夹,它也无法识别。我尝试 NSBundle 始终指向 Documents 目录并使用 [pathForResource:filename ofType:extension inDirectory:directory] ​​但是当你替换目录时这也不起作用。简而言之,如果您的文件系统是使用相同名称的动态文件,则永远不要处理 NSBundle!

我通过为每个新下载创建当前时间戳文件夹并删除旧文件夹然后重置 NSBundle 对象来找到解决方案。现在它可以工作并创建正确的路径,因为它实际上并不存在!阅读NSBundle 上的 Apple 文档以获取更多详细信息。

于 2013-08-01T13:11:28.143 回答