将图像(或其他资源)添加到Mac或iOS Framework

时间:2011-08-24 19:26:46

标签: objective-c ios cocoa

假设我有一个现有的iOS或Mac框架,我们称之为Test.framework。这个框架已成功编译和链接(为iOS部分提供了i386和armv6 / 7 archs的技巧)并且工作得非常好。

现在我要为其添加图片,我们称之为“test.png”。我已将其复制到我的框架的Resources文件夹中,以便我具有以下结构:

ls Test.framework

- Headers -> Versions/Current/Headers
- Resources -> Versions/Current/Resources
- Test -> Versions/Current/Test
- Versions 

ls Test.framework/Resources

- Info.plist
- test.png

然而,当我使用我的框架创建项目时,我无法访问该图像。

我试过了:

[UIImage imageNamed:@"test.png"]
[UIImage imageNamed:@"Test.framework/test.png"]
[UIImage imageNamed:@"Test.framework/Resources/test.png"]

但没有任何结果总能给我一个nil对象。

有什么想法吗?

修改

经过进一步调查后,似乎无法在iOS上完成我想要完成的任务。原因是最终的应用程序包(.app)不会复制为Mac OS编译的应用程序所在的私有框架。

iOS Bundle Structures documentation进一步详述。

感谢Rob Keniger和xuzhe感谢他们的帮助。我会相信xuzhe的答案,因为它实际上是我最初问题的最合适的答案(尽管Rob评论让我深入研究了这个问题)

2 个答案:

答案 0 :(得分:4)

“imageNamed:”方法仅适用于App捆绑包中的图片。你应该使用

[[UIImage alloc] initWithContentsOfFile:path];

代替。

关于路径,因为我不确定“App.Framework”是否在您的App包中,我无法为您提供示例代码。但如果它是剂量,下面的代码应该有效:

NSString* path = [Nsstring stringWithFormat:@"%@/Test.framework/Resources/test.png", [[NSBundle mainBundle] bundlePath]];

答案 1 :(得分:3)

您可以使用[NSBundle bundleForClass:[SomeClass class]]获取特定课程的包。您需要做的就是传入一个在框架中定义的类,您将获得对框架包的引用。

然后,您可以使用pathForResource:ofType: NSBundle方法向捆绑包询问图片的路径,然后使用initWithContentsOfFile: NSImage方法创建图片

请注意,您永远不应对路径进行硬编码。永远。获取资源路径有许多不同的功能和方法,您永远不需要对它们进行硬编码。