模拟器的奇怪行为&将rightBarButtonItems添加到UINavigationItem时的设备

时间:2012-04-10 13:51:24

标签: iphone uinavigationitem sigabrt rightbarbuttonitem

在我的应用程序中,我在UINavigationItem的右侧添加了两个按钮,它在模拟器上工作正常,但是当我在设备上测试它时,它给出了 SIGABRT 的错误,以及{{1} }。我尝试在右侧添加一个按钮,它已成功添加,并且在设备上也能正常工作。我的问题是,问题是什么?

我正在使用以下代码添加正确的按钮

unrecognized selector sent to NSArray

请指出我做错了什么? 谢谢!

4 个答案:

答案 0 :(得分:0)

尝试将这些按钮添加到UIBarButtonItem并将UIBarButtonItem添加到myNavItem,如myNavItem.rightBarButtonItem = barButtonItem;

答案 1 :(得分:0)

你的第一行

NSArray *buttons=[[NSArray alloc] initWithObjects:btnOne,btnTwo,nil]];

最后有一个额外的右括号。不确定这是否会导致该错误,但它应该会导致一些错误。

答案 2 :(得分:0)

您可以使用UISegmentedControl。检查UICatalog代码示例以在导航栏中检查其用法。

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:btn1,btn2,nil]];
   [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
   segmentedControl.frame = CGRectMake(0, 0, 90, 35);                                                 

 segmentedControl.segmentedControlStyle=UISegmentedControlStyleBar;                            
 segmentedControl.momentary = YES;       
 UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];        
 [segmentedControl release];       
 self.navigationItem.rightBarButtonItem = segmentBarItem;  
     [segmentBarItem release]; 
 } 

这是在你的酒吧中添加尽可能多的按钮的最佳方式。希望它会帮助你。 谢谢:))

答案 3 :(得分:0)

myNavItem似乎不是UINavigationItem的实例,而是NSArray的实例(不支持setRightBarButtonItems)。你能否向我们展示更多有关myNavItem的内容?

我怀疑myNavItem没有正确保留它最初指向的导航项。并且它现在巧合地指向NSArray。如果所有对象都无限期保留以便更好地记录,则在调试设置中可能不会发生此错误。

如果此代码从视图控制器的实例运行,请尝试使用此行:

self.navigationItem.rightBarButtonItems = buttons;

在版本5之前的iOS上:如果您收到unrecognized selector sent to NSArray个日志,那么您的内存管理就会出现问题。该日志应在iOS 5之前的iOS上阅读unrecognized selector sent to UINavigationItem

修复内存问题后,您应该使用UIBarButtonItem一个包含两个UIButtons的自定义视图。