0

在我的应用程序中,我在 UINavigationItem 右侧添加了两个按钮,它在模拟器上工作正常,但是当我在设备上测试它时,它给了我SIGABRT错误,以及unrecognized selector sent to NSArray. 我尝试在右侧添加一个按钮,它添加成功,并且在设备上也可以正常工作。我的问题是,有什么问题?

我正在使用以下代码添加右键,

NSArray *buttons=[[NSArray alloc] initWithObjects:btnOne,btnTwo,nil]];
myNavItem.rightBarButtonItems=buttons; //Error on device, but works fine on simulator.

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

4

4 回答 4

0

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

于 2012-04-10T14:31:00.553 回答
0

你的第一行

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

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

于 2012-04-10T15:13:57.993 回答
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]; 
 } 

这是在您的栏中添加任意数量的按钮的最佳方式。希望它会帮助您。谢谢 :)

于 2012-04-10T16:38:09.837 回答
0

这似乎myNavItem不是 的实例UINavigationItem,而是NSArray(不支持setRightBarButtonItems)的实例。你能告诉我们更多关于 的台词myNavItem吗?

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

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

self.navigationItem.rightBarButtonItems = buttons;

在版本 5 之前的 iOS 上:如果您收到unrecognized selector sent to NSArray日志,则说明您的内存管理有问题。日志应unrecognized selector sent to UINavigationItem在 iOS 5 之前的 iOS 上读取。

一旦内存问题得到解决,您应该将 aUIBarButtonItem与包含两个UIButtons.

于 2012-04-11T09:14:18.817 回答