Objective c 仅限资源:这是洁食吗?

Objective c 仅限资源:这是洁食吗?,objective-c,ios,cocoa-touch,cocoa,nsbundle,Objective C,Ios,Cocoa Touch,Cocoa,Nsbundle,在我的iOS应用程序中,我正在将内容从web下载到我的/Library/Caches目录中。我希望将此目录表示为NSBundle,以便与我们正在使用的一些外部API更好地兼容。(这样,只要出现[[NSBundle mainBundle]pathForResource…]就可以将其更改为[myBundle pathForResource…] 以下几点似乎效果不错: NSArray* paths = NSSearchPathForDirectoriesInDomains(NSCachesDirect

在我的iOS应用程序中,我正在将内容从web下载到我的/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];
更好的是,该捆绑包反映了我对/Library/Caches目录所做的任何更改。但是,我很担心,因为从技术上讲,caches目录不是一个包。也就是说:

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

我在任何地方都找不到这种动态创建的、仅限资源的捆绑包。这样做可以吗?

是的,拥有一个仅限资源的捆绑包绝对可以。您引用的某些措辞在iOS之前就已经存在。在OSX中,您可以动态加载可执行代码,这在iOS中是特别排除的

本地化是纯资源捆绑包的一个示例


编辑:

报告说:

尽管文档格式可以利用bundle结构 组织其内容,一般不考虑文件 最纯粹意义上的捆绑。作为一个文档实现的文档 目录,并被视为不透明类型,则视为文档 包,无论其内部格式如何。有关 文档包,请参阅“”

上面说:

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


还要注意的是,苹果一直在电报中表示,它正在尽量减少使用“path”/NSString API,以支持URL API,尽管现有的path API无疑将继续用于更多的主要操作系统版本。

库/缓存目录将缺少捆绑包中所需的一些标准文件,与
Contents/
目录或
Contents/Info.plist
文件类似,因此当将其视为一个目录时,可能无法正常工作。小心操作。

不过,这是否在任何地方都有明确的记录?如果没有苹果的批准,我很犹豫是否要做这样的事情,因为将来事情可能会改变。谢谢你的链接!不过,我不太清楚苹果使用“文档包的捆绑结构”是什么意思。听起来他们想在目录中增加一些内容,但没有具体说明。我想他们是在暗示本地化