无法识别的选择器发送到实例UIBarButtonItem

时间:2012-11-08 15:03:42

标签: ios uibarbuttonitem unrecognized-selector uibarbuttonitemstyle

我正在尝试自定义AppDelegate文件中的导航栏及其按钮:

// first I am customizing the done button

    [[UIBarButtonItem appearance] setBackgroundImage:buttonDone forState:UIControlStateNormal style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:buttonDonePressed forState:UIControlStateHighlighted style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault];


//and then I am customizing the back button


    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBackPressed forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

我为完成按钮获得了[_UIBarItemAppearance setBackgroundImage:]: unrecognized selector sent to instance。奇怪的是,后退按钮的自定义功能正常,而完成按钮的自定义功能会使应用程序崩溃。有什么想法吗?

* PS buttonDone,buttonDonePressed,buttonBack和buttonBackPressed是我创建的四个UIImage-s *

更新:在iOS 5.0模拟器上,应用程序崩溃,但在6.0上它可以正常运行。有关如何避免5.0崩溃的任何建议?

1 个答案:

答案 0 :(得分:1)

从文档中,此签名仅适用于iOS 6.0 +

您可以通过以下方式测试对象方法的可用性:

[obj respondsToSelector:@selector(<methodName>)]

所以试试:

id item = [UIBarButtonItem appearance];
if ([item respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)]) {
   // Use new signature
 } else {
   // Use old signature
 }