加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 在Objective-c中从.bundle加载png时出错

发布时间:2020-12-14 17:50:19 所属栏目:百科 来源:网络整理
导读:我正在我的 Xcode项目中构建一个框架.为了构建框架,我创建了一个聚合目标.该框架由静态库,头文件和.png资产包MyFrameworkResources.bundle组成.当我构建聚合时,一切都已成功创建,并且bundle存在于Products目录中. 我的Xcode项目中还有一个目标应用程序.此应
我正在我的 Xcode项目中构建一个框架.为了构建框架,我创建了一个聚合目标.该框架由静态库,头文件和.png资产包MyFrameworkResources.bundle组成.当我构建聚合时,一切都已成功创建,并且bundle存在于Products目录中.

我的Xcode项目中还有一个目标应用程序.此应用程序用于测试框架产品(静态库,头文件和包).我已将静态库和MyFrameworkResources.bundle添加到目标应用程序的目标依赖项中.我还在目标应用程序的构建阶段中将MyFrameworkResources.bundle添加到Copy Bundle Resources.

我可以使用静态库中的所有文件,但是在尝试从bundle中加载资源时出现错误.这就是我从捆绑中加载资产的方式:

NSString *mainBundlePath = [[NSBundle mainBundle] resourcePath];
NSString *frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"MyFrameworkResources.bundle"];
NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];
NSLog(@"bundle: %@",frameworkBundle);

NSError *error;
[frameworkBundle loadAndReturnError:&error]; // <-- THIS RETURNS AN ERROR
NSLog(@"error: %@",error);
UIImage *image = [UIImage imageWithContentsOfFile:[frameworkBundle pathForResource:@"AnyImage" ofType:@"tiff"]]; // <-- EDIT,USE "tiff",NOT "png"

当我记录捆绑包时,我得到了这个:

束:
NSBundle / Users / my_comp / Library / Application Support / iPhone Simulator / 6.1 / Applications / blah-blah-blah / MyApp.app / MyFrameworkResources.bundle(尚未加载)

当我记录错误时,我得到了这个:

错误:
Error Domain = NSCocoaErrorDomain Code = 4“无法加载捆绑包”MyFrameworkResources“,因为无法找到其可执行文件.” UserInfo = 0x7535ee0 {NSLocalizedRecoverySuggestion =尝试重新安装捆绑包.,NSLocalizedFailureReason =无法找到捆绑包的可执行文件.,NSLocalizedDescription =无法加载捆绑包“MyFrameworkResources”,因为无法找到其可执行文件.,NSBundlePath = / Users / my_comp / Library / Application Support / iPhone Simulator / 6.1 / Applications / blah-blah-blah / MyApp.app / MyFrameworkResources.bundle}

所以要仔细检查,我在我的计算机上进入了/ Users / my_comp / Library / Application Support / iPhone Simulator / 6.1 / Applications / blah-blah-blah / MyApp.app /,而MyFrameworkResources.bundle实际上就在那里.所以现在我不知所措.我已经尝试清理聚合目标,清理目标应用程序,删除目标应用程序,没有运气.

知道为什么我无法从捆绑中加载图像吗? (对不起冗长的描述)

Fyi,我一直在使用this great tutorial作为构建框架和捆绑的指南.

解决方法

在经历了这方面的努力之后啊,我进入MyFrameworkResources.bundle只是为了仔细检查是否包含了所有资产.事实证明,Xcode将.png文件重命名为.tiff文件,并删除了视网膜资产.经过进一步调查,我发现Xcode自动将视网膜和非视网膜.png文件组合成“一个多页TIFF”.这是一个 reference.

解决方案,使用Type:@“tiff”而不是ofType:@“png”:

UIImage *image = [UIImage imageWithContentsOfFile:[frameworkBundle pathForResource:@"AnyImage" ofType:@"tiff"]];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读