2011-09-21 28 views
3

在我的iOS应用中,我从网上下载内容到我的/ Library/Caches目录中。我想将此目录表示为NSBundle,以便与我们使用的一些外部API更好地兼容。 (这样的话,我们可以简单地改变[一个NSBundle mainBundle] pathForResource ...]至[myBundle pathForResource ...]每当它出现。)纯资源NSBundle:这是犹太教吗?

下,似乎很好地工作:

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString* cachesDirectory = [paths objectAtIndex:0]; 
NSBundle* bundle = [NSBundle bundleWithPath:cachesDirectory]; 

更好但是,该软件包反映了我对/ Library/Caches目录所做的任何更改。但是,我担心,因为缓存目录在技术上不是每个Apple's docs的捆绑包。也就是说:

  • 它不是一个“具有标准化层次结构的目录,其中包含可执行代码和该代码使用的资源”,因为没有代码。
  • 它既不是应用程序,框架也不是插件包。
  • 它最像一个应用程序包,但它不包含所需的Info.plist或可执行文件。

我无法在这种动态创建的资源绑定中找到任何地方。这可以吗?

回答

2

是的,拥有仅限资源的捆绑包绝对没问题。一些引用预存iOS的verbage。在OS X中,您可以动态加载可执行代码,这在iOS中已被明确排除。

本地化是仅资源绑定的示例。


编辑:

Bundle Programming Guide说:

虽然文档格式可以利用光纤束结构来 组织他们的内容,文件一般不认为是纯粹意义上 束。无论其内部格式如何,作为 目录实施并被视为不透明类型的文档都被认为是文档 包。有关 文件包的更多信息,请参阅“Document Packages”。

它说:

有几种方式来访问文件包的内容。 由于文档包是一个目录,因此可以使用任何适当的文件系统例程来访问文档的内容 。如果 对文档包使用包结构,则还可以使用 NSBundle或CFBundleRef例程。捆绑结构的使用 特别适用于存储多个 本地化的文档。

还注意到苹果一直在说,尽管现在的路径API无疑会继续适用于更多的主要操作系统版本,但它已经在尽量减少使用“path”/ NSString APIs来支持URL API。

+0

这是专门记载在任何地方,但?如果没有得到苹果的批准,我会犹豫不决,因为未来可能会发生变化。 – Archagon

+0

编辑包含一些苹果verbage – bshirley

+0

谢谢你的链接!不过,我并不完全确定Apple使用“文档包的捆绑结构”的含义。这听起来像是他们想要在目录中额外添加一些东西,但没有指定什么。 – Archagon

2

/Library/Caches目录将缺少某些软件包中所需的某些标准文件,如Contents/目录或Contents/Info.plist文件,因此在将其视为一个文件时可能无法正常运行。谨慎行事。