UIbarbuttonitem出现导致崩溃

UIbarbuttonitem appearance leads to crash

CommonViewController,继承自UINavigationController。我在里面完成了下面的方法。

+ (void)initialize{
    UINavigationBar *naVcBar = [UINavigationBar appearance];
    [naVcBar setBackgroundImage:[UIImage imageNamed:@"bg_nav"] forBarMetrics:UIBarMetricsDefault];

    UIBarButtonItem *buttonItem = [UIBarButtonItem appearance];
    NSMutableDictionary *textAttributes = [NSMutableDictionary dictionary];
    [textAttributes setObject:[UIColor blackColor] forKey:UITextAttributeFont];
    [buttonItem setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
}

那么,有一个viewControllerMovieListViewController,就是那个CommonViewControllerrootViewController,下面是里面的代码

- (void)viewDidLoad {
    [super viewDidLoad];
    UIBarButtonItem *right=[[UIBarButtonItem alloc] initWithTitle:@"切换模式" style:(UIBarButtonItemStylePlain) target:self action:@selector(exchangeView)];
    self.navigationItem.rightBarButtonItem=right;
}

结果是程序崩溃了。 它崩溃于:self.navigationItem.rightBarButtonItem=right;

所以我尝试修复它并发现当我删除代码时

UIBarButtonItem 
*buttonItem = [UIBarButtonItem appearance];
    NSMutableDictionary *textAttributes = [NSMutableDictionary dictionary];
    [textAttributes setObject:[UIColor blackColor] forKey:UITextAttributeFont];
    [buttonItem setTitleTextAttributes:textAttributes forState:UIControlStateNormal];

一切正常。 但我不知道原因,为什么?谢谢!

错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICachedDeviceWhiteColor pointSize]: unrecognized selector sent to instance 0x7fb048c3b3d0'

你的问题出在这一行:

[textAttributes setObject:[UIColor blackColor] forKey:UITextAttributeFont];

您正在传递颜色但指定了 "font" 属性。改变两者之一。要么传入字体而不是颜色,要么将键更改为用于颜色的键。

此外,UITextAttributeFont 已弃用。请改用 NSFontAttributeName