Сбой приложения в методе делегирования UITabBarController

#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. Условия работают нормально.