apo*_*che 7 cocoa objective-c ios
假设我有一个现有的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
Run Code Online (Sandbox Code Playgroud)
然而,当我使用我的框架创建项目时,我无法访问该图像.
我试过了:
[UIImage imageNamed:@"test.png"]
[UIImage imageNamed:@"Test.framework/test.png"]
[UIImage imageNamed:@"Test.framework/Resources/test.png"]
Run Code Online (Sandbox Code Playgroud)
但没有任何成功,总能给我一个nil对象.
有任何想法吗 ?
编辑
经过进一步的调查后,似乎我想要实现的目标无法在iOS上完成.原因是最终的应用程序包(.app)不会复制为Mac OS编译的应用程序所在的私有框架.
这在iOS Bundle Structures文档中进一步详细说明.
感谢Rob Keniger和xuzhe对他们的赞赏.我会赞扬xuzhe的答案,因为它实际上是我最初问题的最合适的答案(尽管Rob评论让我深入研究了这个问题)
“imageNamed:”方法仅适用于应用程序包中的图像。你应该使用
[[UIImage alloc] initWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)
反而。
关于路径,由于我不确定“Test.Framework”是否在您的应用程序包中,因此我无法为您提供示例代码。但如果确实如此,下面的代码应该可以工作:
NSString* path = [Nsstring stringWithFormat:@"%@/Test.framework/Resources/test.png", [[NSBundle mainBundle] bundlePath]];
Run Code Online (Sandbox Code Playgroud)