颜色集和UIColorAttributeTraitStorage错误

Mar*_*vie 9 iphone xcode objective-c ios

我一直在努力制作一个用Xcode 9编写的适用于iOS11 iOS9.0兼容的应用程序,它突然在iPhone 4S上因此错误而崩溃:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UIColorAttributeTraitStorage'
Run Code Online (Sandbox Code Playgroud)

同样的项目在iPhone 7上运行良好.

我改变了所有[UIColor colorNamed:],因为Xcode建议:

if (@available(iOS 11.0, *)) {
        statusBar.backgroundColor = [UIColor colorNamed:@"MyColor"];
    } else {
        statusBar.backgroundColor = kColorFromHex(0x509E2F);
    }
Run Code Online (Sandbox Code Playgroud)

但错误没有发生.我也没有在Apple文档或Web上的任何地方找到任何提及UIColorAttributeTraitStorage的内容,除了一些日文(?)帖子.我在这篇文章中理解的是,有人可能在iOS 10.3和Xcode 9中遇到了与Color Set相同的问题.

所以似乎问题出在包含颜色集的xcassets中.这是否意味着颜色集没有向后兼容性?如果我添加一个没有办法分发我的iOS低于11.0的应用程序?

PS:我没有任何iOS 10设备,因此我不知道自Xcode 9公开发布以来该问题是否还有10个以上.任何人都可以尝试一下吗?

zzz*_*zel 17

在Xcode 9 Interface Builder中使用新的Color集时遇到了同样的问题.如果您需要支持iOS 10或更早版本,请不要在Interface Builder中使用Color set中的任何颜色.

因此,请确保不要iPhoneSDK在Interface Builder中选择上面的任何颜色.

在此输入图像描述

  • 如果你找不到像我这样的问题的颜色,你可以在故事板中搜索"<capability name ="命名颜色"minToolsVersion ="9.0"/>`,它声明有一个颜色集. (4认同)

Gro*_*oot 6

TL; DR ; 您可能从"最近使用的颜色"下拉列表中选择了一种颜色,该颜色是在您当前使用的项目之外的其他项目中定义的颜色资源.确保在标记为"丢失"的笔尖或故事板中没有任何选定的颜色.

假设您在"项目1"中定义了一个颜色资源,并将其命名为"YorkGreen",如下例所示.

该颜色将显示在所有其他项目的"最近使用的颜色"下拉列表.如果您选择它(从"项目1"以外的任何其他项目),NSInvalidUnarchiveOperationException将在加载该视图(笔尖或故事板)时抛出,您的应用程序将崩溃.

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException',
reason: 'Could not instantiate class named _UIColorAttributeTraitStorage'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

希望这是一个错误,Xcode 9甚至可以显示来自其他项目的Color Assets,并且这将在未来的Xcode版本中修复.