使用 NSBundle 加载我的资源
Posted
技术标签:
【中文标题】使用 NSBundle 加载我的资源【英文标题】:Using NSBundle to load my resources 【发布时间】:2012-12-10 21:58:30 【问题描述】:我想将我的资源、nib 文件和本地化文件分离到一个通用的可重用包中。因此,我为我的 ios 应用程序创建了一个包,并使用构建阶段指定要包含在包中的资源,复制包资源。但是,现在如果我尝试加载捆绑包,我将无法加载捆绑包。我尝试使用 [NSBundle allBundles] 并且该数组仅显示主应用程序包。
我还尝试枚举 NSApplicationPath 的目录,但唯一可用的包是我的应用程序默认包。我想学习这种技术并利用它来分离我的资源。任何帮助和建议将不胜感激。谢谢
【问题讨论】:
【参考方案1】:[NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], pathToYourBundleWithinTheDotAppDirectory];
让我知道你过得怎么样。
【讨论】:
它不加载包。看起来,捆绑包本身位于主应用程序捆绑包中。所以我必须使用 [[NSBundle mainBundle] pathForResource:@"MyBundle" ofType:@"bundle"] 获取包的路径,然后使用 bundleWithPath: 方法使用路径加载包 但是,我将图像添加到包中并尝试使用 pathForResource:ofType: 方法加载图像,但该方法为 nil,然后我浏览到模拟器应用程序文件夹并看到图像不是复制。 您可能需要在构建中添加“复制文件”阶段。【参考方案2】:试试这样的:
NSBundle* bundle=[NSBundle bundleWithIdentifier: @"bundle name"];
并确保在将包拖到项目时选择了这些选项:
【讨论】:
我通过将目标添加到现有应用程序来创建捆绑包。【参考方案3】:对于具有一个捆绑包的项目,我使用:
// in this example, we load test.png from the bundle
NSString *pathToResource = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
之所以如此方便,是因为当您拥有本地化文件时,它会提供当前用户区域设置的文件路径。这很方便,因为本地化文件不在主目录中,而是在它们自己的子文件夹中(例如,英文本地化文件在 @"en.lproj" 子文件夹中),并且通过名称调用它们很麻烦,因为您需要完整路径。此方法为您获取路径。
【讨论】:
以上是关于使用 NSBundle 加载我的资源的主要内容,如果未能解决你的问题,请参考以下文章