假设我有一个现有的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评论让我深入研究了这个问题)
答案 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
方法创建图片
请注意,您永远不应对路径进行硬编码。永远。获取资源路径有许多不同的功能和方法,您永远不需要对它们进行硬编码。