#iphone #objective-c #uitabbarcontroller
#iPhone #цель-c #uitabbarcontroller #objective-c
Вопрос:
Привет, я пытаюсь динамически добавлять и удалять элементы панели вкладок. Есть два массива. Сначала отображается один из них с добавленным tabbaritem с именем «More», а другой массив добавляется на панель вкладок, когда пользователь нажимает больше. Пользователь может вернуться к первому массиву, нажав меньше tabbaritem во втором массиве. Проблема в том, что когда я часто нажимаю все больше и меньше элементов tabbaritems последовательно More, Less, More, Less, More, More, Less — приложение вылетает после последнего Less. Массив кажется мне нормальным, как и контроллер панели вкладок. Я не могу разобраться в проблеме. Ниже приведен код метода делегирования панели вкладок.
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"selected view controller is :%@",viewController);
if(viewController.view.tag == -1){
[self.tabBarController setViewControllers:self.level2TabBarItems animated:YES];
[self.tabBarController setSelectedIndex:0];
}else if(viewController.view.tag == -2){
[self.tabBarController setViewControllers:self.level1TabBarItems animated:YES];
[self.tabBarController setSelectedIndex:0];
}
}
Может кто-нибудь, пожалуйста, сообщить мне, где я делаю неправильно? С наилучшими пожеланиями
Комментарии:
1. Можете ли вы опубликовать журналы сбоев здесь?
2. Я забыл упомянуть, что сбой происходит в строке [self.TabBarController setViewControllers:self.level1TabBarItems animated: YES]; Также в моей библиотеке / папке Logs для этого сценария нет отчета о сбое. Я проверил с помощью точки останова, что uitabbarcontroller и level1TabbarItems, оба не являются нулевыми или пустыми.
Ответ №1:
У меня была похожая проблема. Я предполагаю, что вы создаете новый экземпляр VC в своем массиве, поэтому частое переключение больше / меньше приводит к вызову метода из старого экземпляра (на данный момент он еще не заменен).
К сожалению, setViewControllers
метод (как говорится в документации) автоматически удаляет вызов старых контроллеров просмотра dealloc
, и кажется, что другого способа их повторного использования нет.
В вашем случае вы можете попробовать отключить выбор вкладок до tabBarController:didSelectViewController:
выполнения реализации (я это не тестировал):
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
self.selectLock = YES;
// your code
self.selectLock = NO;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
return !self.selectLock;
}
Ответ №2:
Прокомментируйте NSLog здесь. Это неподходящий формат для печати этого.
Ответ №3:
Возможно, ваш массив пуст. Попробуйте установить точку останова, и вы найдете решение, какая строка вызывает сбой.
Комментарии:
1. Нет, сэр, массивы не пустые : (
2. затем отладьте свое приложение, вы обязательно найдете решение для своего сбоя
Ответ №4:
Я думаю, что как if, так и else if не удовлетворяются этому условию
Просто проверьте свой тег с помощью этого NSLog(@"%d",viewController.view.tag);
Комментарии:
1. сбой приложения при [self.TabBarController setViewControllers:self.level1TabBarItems animated: YES]; поэтому я не думаю, что проблема не в NSLog. Условия работают нормально.