使用NSBundle加载我的资源

5
我希望将我的资源、nib文件和本地化文件分离到一个通用的可重复使用的bundle中。因此,我为我的iOS应用程序创建了一个bundle,并使用构建阶段的“复制bundle资源”指定要包含在bundle中的资源。但是,现在如果我尝试加载bundle,我无法加载bundle。我尝试使用[NSBundle allBundles],但数组仅显示主应用程序bundle。
我还尝试枚举NSApplicationPath目录,但仍然只有我的应用程序默认bundle可用。我想学习这个技巧并利用它来分离我的资源。任何帮助和建议都将不胜感激。谢谢。
3个回答

6
[NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], pathToYourBundleWithinTheDotAppDirectory];

请告诉我你的进展情况。

1
它无法加载捆绑包。看起来,捆绑包本身位于主应用程序捆绑包内。因此,我必须使用[[NSBundle mainBundle] pathForResource:@"MyBundle" ofType:@"bundle"]获取捆绑包的路径,然后使用bundleWithPath:方法加载捆绑包。 - Sandeep
然而,我将一张图片添加到bundle中,并尝试使用pathForResource:ofType:方法加载该图片,但该方法返回nil。然后我浏览了模拟器应用程序文件夹,发现该图片并未被复制。 - Sandeep
1
你可能需要在构建过程中添加一个“复制文件”阶段。 - hd1

3
尝试使用类似以下的方法:
NSBundle* bundle=[NSBundle bundleWithIdentifier: @"bundle name"];

确保您在将 bundle 拖到项目时选择了这些选项:

enter image description here


我通过将目标添加到现有应用程序中创建了捆绑包。 - Sandeep

1

对于只有一个捆绑包的项目,我使用:

// in this example, we load test.png from the bundle
NSString *pathToResource = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];

这样方便的原因在于,当您拥有本地化文件时,它为当前用户语言环境提供了文件路径。这很方便,因为本地化文件不在主目录中,而是在自己的子文件夹中(例如,英文本地化文件在 @"en.lproj" 子文件夹中),通过名称调用它们很麻烦,因为需要完整的路径。这种方法可以为您获取路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接