我有一个静态库,我需要一些图形资源作为图像。在我的课堂上,我会以这种方式添加图像:
[UIImage imageNamed:@"myImage.png"]
但它不起作用......我该怎么做?
我有一个静态库,我需要一些图形资源作为图像。在我的课堂上,我会以这种方式添加图像:
[UIImage imageNamed:@"myImage.png"]
但它不起作用......我该怎么做?
拥有该捆绑包后,您可以像这样访问那里的资源:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"YourBundle" ofType:@"bundle"];
NSString *imagePath = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"yourImage" ofType:@"png"];
UIImage *image= [[UIImage alloc] initWithContentsOfFile:imagePath];
除了带有静态库的代码之外,您无法提供任何其他内容。这是因为.a
文件是目标文件的简单存档,在 Mac/iOS 下增加了支持多 CPU 架构的能力。
您唯一的选择是创建一个框架,它可以提供代码以及其他资源。
在 Xcode 中,如果您链接静态库,则该库中的代码将直接包含在您的可执行文件中。没有文件被复制到应用程序包中,因此无法复制图像。
如果您的静态库中有图像文件,您可以通过在 Xcode 中将复制文件构建阶段添加到您的目标来简单地将其复制到您的应用程序包中。
我找到了解决方案..
我探索了 bundles 目录(已编译),我注意到我的图像(.png
)他们有所有的 iestensione.tiff
为避免这种情况,我将HIDPI_COMBINE_IMAGES
bundle buid 设置中的密钥设置为NO
..所以我可以按照e1985的建议恢复我的照片
创建一个框架目标,而不是静态库。确保框架的构建阶段中存在“复制捆绑资源”。在那里添加您的资源文件。
然后从外部项目中找到框架包中的文件,我只是这样做:
NSArray<NSBundle *> * bundles = [NSBundle allFrameworks];
NSString * filePath;
for (int i = 0; i < bundles.count; i++) {
filePath = [[bundles objectAtIndex:i] pathForResource:@"picture" ofType:@"png"];
if (filePath != nil) break; // found
}