仅限资源的NSBundle:这是犹太人吗?

时间:2011-09-21 01:52:33

标签: objective-c ios cocoa-touch cocoa nsbundle

在我的iOS应用中,我正在将内容从网络下载到我的/ Library / Caches目录中。我想将此目录表示为NSBundle,以便更好地兼容我们正在使用的一些外部API。 (这样,我们可以随时将[[NSBundle mainBundle] pathForResource ...]改为[myBundle pathForResource ...]。)

以下似乎工作正常:

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

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

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

我无法在任何地方找到这种动态创建的,仅限资源的捆绑包。这可以吗?

2 个答案:

答案 0 :(得分:2)

是的,拥有一个仅限资源的捆绑包是绝对可以的。你引用的一些verbage预先存在iOS。在OS X中,您可以动态加载可执行代码,这些代码在iOS中特别排除。

本地化是仅限资源包的示例。


编辑:

Bundle Programming Guide说:

  

尽管文档格式可以利用捆绑结构   组织他们的内容,一般不考虑文件   捆绑在最纯粹的意义上。实现为的文档   目录并被视为opaque类型被视为文档   包,无论其内部格式如何。有关的更多信息   文档包,请参阅“Document Packages。”

说:

  

有多种方法可以访问文档包的内容。   因为文档包是一个目录,所以您可以访问   使用任何适当的文件系统例程来记录文档的内容。如果你   使用捆绑结构为您的文档包,您也可以使用   NSBundle或CFBundleRef例程。束结构的使用是   特别适合存储多个的文档   本地化。

另请注意,Apple一直在宣传它正在尽量减少使用“path”/ NSString API以支持URL API,尽管现有的路径API无疑将继续用于更多主要的OS版本。

答案 1 :(得分:2)

/Library/Caches目录将缺少捆绑包中所需的某些标准文件,例如Contents/目录或Contents/Info.plist文件,因此在处理为{{1}}目录时可能无法正常运行一。谨慎行事。