添加导致错误的 UIBarButtonItem 数组

Posted

技术标签:

【中文标题】添加导致错误的 UIBarButtonItem 数组【英文标题】:Adding an array of UIBarButtonItem resulting in an Error 【发布时间】:2015-03-10 15:46:25 【问题描述】:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSArrayI isSystemItem]: 无法识别的选择器发送到实例 0x7fa5bbd726f0'

我关注了他的solution here,显然我没有做任何错误。我正在做的是 - 在我的导航栏右侧添加两个按钮(栏按钮)。

     UIBarButtonItem *notificationButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Notification.png"]
                                                                                  style:UIBarButtonItemStylePlain target:self action:@selector(notificationAction)];
        UIBarButtonItem *searchButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search"]
                                                                                  style:UIBarButtonItemStylePlain target:self action:@selector(searchAction)];
        NSArray *arrNavigationButtons = [NSArray arrayWithObjects:notificationButtonItem,searchButtonItem, nil];
// warning here - Incompatible pointer type.
        self.navigationItem.rightBarButtonItem = arrNavigationButtons;

【问题讨论】:

你得到的 2 个答案告诉你问题是什么以及如何解决它。你应该得到一个编译器警告。警告是你的朋友。密切关注他们。 @DuncanC 。那是一个愚蠢的错误。下次我会更好。谢谢。 【参考方案1】:

将最后一行更改为rightBarButtonItems。注意末尾的 s。

【讨论】:

【参考方案2】:

self.navigationItem.rightBarButtonItem 是单个 ButtonItem 并且您将 NSArray 传递给它,这是无效的调用。要传递 NavigationBarButtons,您需要调用正确的函数。如果你调用它,我认为你会收到不兼容的指针类型的警告。只需将您的代码更改为:

self.navigationItem.rightBarButtonItems = arrNavigationButtons;

【讨论】:

以上是关于添加导致错误的 UIBarButtonItem 数组的主要内容,如果未能解决你的问题,请参考以下文章

WEPopoverController presentPopoverFromBarButtonItem 导致指定的 UIBarButtonItem 消失

从 UIBarButtonItem 触发 textFieldShouldReturn

在 UIToolbar 中的 UIBarButtonItem 上更改 tintColor 会导致按钮消失并从左侧动画化

按下 UIButton 会导致无法识别的选择器错误

IOS UIBarButtonItem 工作正常,而 UIButton 导致 Unrecognized Selector Sent to Instance

添加 UIBarButtonItem 覆盖 UINavigationController 后退按钮