通过Interface Builder设置命名颜色触发NSInvalidUnarchiveOperationException崩溃求助
解决IBInspectable设置命名颜色导致的IBClass找不到崩溃问题
问题原因
在iOS 12及更早版本中,Xcode会用IBColor类序列化Storyboard中设置的Assets命名颜色,但该系统版本本身并不包含IBColor类,运行时反序列化时就会抛出NSInvalidUnarchiveOperationException异常,提示找不到IBColor类。
解决方案
方案1:代码中手动赋值命名颜色
不在Storyboard中设置该IBInspectable属性,改为在代码初始化阶段赋值:
- (void)awakeFromNib { [super awakeFromNib]; self.color = [UIColor colorNamed:@"YourColorAssetName"]; }
方案2:添加IBColor空类实现
创建一个空的IBColor类,让系统反序列化时能找到对应的类,避免崩溃:
- 创建
IBColor.h文件:
#import <UIKit/UIKit.h> @interface IBColor : UIColor @end
- 创建
IBColor.m文件:
#import "IBColor.h" @implementation IBColor @end
- 确保这两个文件被添加到项目的正确Target中,参与编译。
补充说明
如果项目最低支持版本升级到iOS 13及以上,该问题会自动消失——iOS 13开始系统原生支持Assets命名颜色的反序列化,不再依赖IBColor类。
内容的提问来源于stack exchange,提问作者Stefano Andrean Salim
相关产品推荐
相关产品推荐

