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

标签 ios objective-c xcode png bundle

我正在我的 Xcode 项目中构建一个框架。为了构建框架,我创建了一个聚合目标。该框架由静态库、头文件和 .png 资源包 MyFrameworkResources.bundle 组成。当我构建聚合时,一切都已成功创建,并且 bundle 存在于我的 Products 目录中。

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

我可以很好地使用静态库中的所有文件,但在尝试从包中加载资源时出现错误。这就是我从包中加载 Assets 的方式:

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"

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

bundle : 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 实际上就在那里。所以现在我很茫然。我已经尝试清理聚合目标、清理目标应用程序、删除目标应用程序,但没有成功。

知道为什么我无法从 bundle 中加载图像吗?(抱歉描述冗长)

仅供引用,我一直在使用 this great tutorial作为构建框架和 bundle 的指南。

最佳答案

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

解决方法,用ofType:@"tiff"代替ofType:@"png":

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

关于ios - 从 Objective-c 中的 .bundle 加载 png 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438673/

相关文章:

ios - 如何将自动扩展 TextView 全部包含在 XCode/Swift/IOS 中的可滚动容器中

ios - iTunes 内部测试员通知

ios - 新的 Swift 应用程序创建 Obj C 文件

ios - 如何锁定键盘为简体中文手写?

ios - iPad 设置应用程序背景颜色

ios - 将 UITextfield 中的每个字符记录到 IOS 中的 NSDictionary

ios - 基于 4 英寸显示屏构建的设备不显示黑色顶部和底部栏

iOS:如何将音频文件读入 float 缓冲区

iphone - IOS - cellForRowAtIndexPath 跳过行

iphone - 尝试以编程方式向 UINavigationController 添加按钮,但它从未显示