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];
}
那么,有一个viewController
叫MovieListViewController
,就是那个CommonViewController
的rootViewController
,下面是里面的代码
- (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
。
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];
}
那么,有一个viewController
叫MovieListViewController
,就是那个CommonViewController
的rootViewController
,下面是里面的代码
- (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
。