我正在使用以下来在viewDidLoad中初始化bundle对象。
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并删除旧文件。所以我删除它并从网上下载最新的。我已经确认bundle对象指向同一个文件夹但是在我替换现有文件夹后它无法获取该bundle内的内容。如果我重新启动应用程序,我会获得最新内容我不确定这里发生了什么。有人可以指出可能出现的问题吗?
我替换捆绑后返回Nil路径!我可以从终端看到所需文件就在那里!
NSString *path = [documentBundle pathForResource:filename ofType:extension];
我还尝试在更换bundle之后重新初始化bundle对象,但它仍然指向相同的内存地址(使用%p打印)并且不会从新bundle返回任何内容。
我在设备和模拟器上得到相同的结果。
答案 0 :(得分:0)
似乎NSBundle在实例化对象期间会记住文件系统。之后,它无法识别添加到该文件夹的任何新文件!如果删除文件夹并重新创建具有相同名称的新文件夹,则它也无法识别。我尝试NSBundle总是指向Documents目录并使用[pathForResource:filename ofType:extension inDirectory:directory]但是当你替换目录时这也不起作用。简而言之,如果你的文件系统使用相同的名称是动态的,那么永远不要处理NSBundle!
我通过为每个新下载创建当前时间戳文件夹并删除旧文件夹然后重置NSBundle对象来找到解决方案。现在它工作并创建正确的路径,因为它实际上并不存在!请阅读Apple documents on NSBundle了解详情。