Странное поведение симулятора и устройства при добавлении 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]];
имеет дополнительную правую скобку в конце. Не уверен, что это вызовет эту ошибку, но это должно вызвать некоторую ошибку.