-[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m 中的断言失败

Posted

技术标签:

【中文标题】-[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m 中的断言失败【英文标题】:Assertion failure in -[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m 【发布时间】:2015-01-30 10:44:31 【问题描述】:
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  // Override point for customization after application launch.

  UIColor *navBarColor =
  [UIColor colorWithPatternImage:[UIImage imageNamed:@"SandPattern.jpg"]];

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_ios_6_1 
    [[UINavigationBar appearance] setTintColor:navBarColor];
    
        else 
    [[UINavigationBar appearance] setBarTintColor:navBarColor];
        
        // various functions....
        return YES;

应用崩溃并抛出以下错误。

*** -[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m:1448 中的断言失败

*** -[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m:1448 中的断言失败

libc++abi.dylib: terminate_handler 意外抛出异常

【问题讨论】:

【参考方案1】:

我移动了代码以将导航栏更新为一个函数,并在 AppDelegate.m 中的其他函数之后调用它,它工作正常。仍在寻找崩溃背后的确切逻辑。

-(void)updateUI
    UIColor *navBarColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"SandPattern.jpg"]];
    //    [UIColor colorWithRed:129/255.0 green:200/255.0 blue:244/255.0 alpha:1.0];
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1)
        [[UINavigationBar appearance] setTintColor:navBarColor ];
    
    else 
        [[UINavigationBar appearance] setBarTintColor: navBarColor];
    

这样的最终代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
            // Override point for customization after application launch.

         // various functions....
           [self updateUI];
            return YES; 
 

【讨论】:

以上是关于-[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m 中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章

如何 initwithCoder 和 encodewithCoder 获取指针的值

方法 Swizzle encodeWithCoder/initWithCoder

符合 Codable 协议的类因 encodeWithCoder 失败:无法识别的选择器发送到实例

当视图包含带有自定义图像的 UIButton 时,UIViewController encodeWithCoder 失败

Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器

用runtime来重写Coder和deCode方法 归档解档的时候使用