2012-04-10 4 views
0

В моем приложении я добавил две кнопки справа от UINavigationItem, его рабочий тон на симуляторе, но когда я тестирую его на устройстве, он дает мне ошибку SIGABRT , а также unrecognized selector sent to NSArray. Я попытался добавить одну кнопку с правой стороны, она была успешно добавлена ​​и отлично работает на устройстве. Здесь мой вопрос: в чем проблема?Странное поведение симулятора и устройства при добавлении rightBarButtonItems в UINavigationItem

Я добавляю правильные кнопки, используя следующий код,

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

Пожалуйста, укажите мне, что я делаю неправильно? Спасибо!

+1

Что такое селектор, о котором он жалуется? –

+0

@PhillipMills, setRightBarButtonItems – Hemang

+0

Нам понадобится больше контекста для myNavItem, а также от того, где этот код работает. Это в viewDidLoad? Это в initWithNib ....? – FelixLam

ответ

0

Оказывается, что myNavItem не является экземпляром UINavigationItem, а экземпляр NSArray (который не поддерживает setRightBarButtonItems). Не могли бы вы показать нам больше строк относительно myNavItem?

Мое подозрение, что myNavItem неправильно сохранил элемент навигации, на который он первоначально указывал. И это указывает на NSArray теперь по совпадению. Эта ошибка может не возникать в настройке отладки, если все объекты сохраняются неограниченно для лучшего ведения журнала.

Если этот код работает с экземпляром контроллера представления попытаться использовать эту линию вместо:

self.navigationItem.rightBarButtonItems = buttons; 

КСНА до версии 5: если вы получаете unrecognized selector sent to NSArray журналов есть что-то не так с вашим управлением памятью. Журнал должен читать unrecognized selector sent to UINavigationItem на iOS до iOS 5.

После исправления проблемы памяти вы должны использовать UIBarButtonItem с пользовательским представлением, содержащим два UIButtons.

+0

FelixLam, спасибо за ответ! Я прочитал ваш комментарий, что «Начиная с iOS 5 можно добавить несколько кнопок на панели навигации». Я тестировал свое приложение на iOS 4 – Hemang

+0

Я отредактировал свой ответ, чтобы также охватить iOS 4. – FelixLam

+0

FelixLam, thats right !. Я попытался с пользовательским представлением и добавил его в подзаголовок 'UIBarButtonItem', но у меня есть некоторые проблемы с программированием, поэтому мне нужно использовать кнопки типа' UIBarButtonItems', а не 'UIButton' – Hemang

0

попробуйте добавить эти кнопки в UIBarButtonItem и добавить UIBarButtonItem в myNavItem, например myNavItem.rightBarButtonItem = barButtonItem;

+0

Anu, rightBarButtonItem работает нормально, но rightBarButtonItems имеет проблемы. Я добавил только кнопки типа UIBarButtonItem. – Hemang

0

Ваша первая линия

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

имеет дополнительную правую скобку в конце. Не уверен, что это приведет к этой ошибке, но это должно вызвать некоторую ошибку.

+0

, что вызовет ошибку компиляции. – FelixLam

+0

Скотт, Это была моя ошибка, но проблема не в этом. – Hemang

+0

@FelixLam, да, вы правы! – Hemang

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]; 
} 

Это лучший способ добавления столько количество кнопок в строке, как вы desire.Hope это собирается помочь и. Спасибо :)

+2

Начиная с iOS 5, можно добавить несколько кнопок на панели навигации. – FelixLam

+0

Nikhil, приятные решения! но могу ли я сделать то же самое с 'UIBarButtonItem' вместо простых' UIButtons'. Я должен использовать 'UIBarButtonItem'. Я пытаюсь это сделать, но он падает. – Hemang

+0

Я хочу добавить 'UIBarButtonItem' в управление сегментами. – Hemang

Смежные вопросы