Странное поведение симулятора и устройства при добавлении rightBarButtonItems в UINavigationItem

В моем приложении я добавил две кнопки справа от 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 ответа

Решение

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

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

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

self.navigationItem.rightBarButtonItems = buttons;

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

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

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

Вы можете использовать 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]; 
 } 

Это лучший способ добавить столько кнопок на панель, сколько вы пожелаете. Надеюсь, это поможет вам. Спасибо:)

Ваша первая строка

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

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

Другие вопросы по тегам