UITabBar - setItems: animated: Crashes - PullRequest
       8

UITabBar - setItems: animated: Crashes

1 голос
/ 19 ноября 2010

Итак, у меня есть контроллер UITabView, созданный в конструкторе интерфейсов.Свойства заголовка и изображения UITabBarItem были установлены в IB.Объект контроллера панели вкладок присутствует в XIB, и все необходимые соединения сделаны.Я могу вызывать простые команды, такие как

[tabBarController setSelectedIndex: 1];

Все работает нормально, но когда я устанавливаю свойство 'items', у меня происходит сбой.Может быть, у меня проблема с управлением памятью?

Вот код сбоя:

NSMutableArray *modifiedItems = [[tabBarController.tabBar items] mutableCopy];  
[modifiedItems removeObjectAtIndex:2];  
NSArray *newItems = [[NSArray alloc] initWithArray:modifiedItems];  
-->[tabBarController.tabBar setItems:newItems animated:NO];  

* Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Прямое изменениепанель вкладок, управляемая контроллером панели вкладок, не допускается. '* Стек вызовов при первом броске:

0   CoreFoundation                      0x02b9bb99 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x02ceb40e objc_exception_throw + 47
2   CoreFoundation                      0x02b54238 +[NSException raise:format:arguments:] + 136
3   CoreFoundation                      0x02b541aa +[NSException raise:format:] + 58
4   UIKit                               0x005f7019 -[UITabBar setItems:animated:] + 2037
5   Zag Map                             0x00003422 -[ZagMapAppDelegate iPodTouchRemoval] + 270
6   Zag Map                             0x00002eea -[ZagMapAppDelegate applicationDidFinishLaunching:] + 551
7   UIKit                               0x003faf80 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1252
8   UIKit                               0x003fd3b0 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346
9   UIKit                               0x004073ec -[UIApplication handleEvent:withNewEvent:] + 1958
10  UIKit                               0x003ffb3c -[UIApplication sendEvent:] + 71
11  UIKit                               0x004049bf _UIApplicationHandleEvent + 7672
12  GraphicsServices                    0x03357822 PurpleEventCallback + 1550
13  CoreFoundation                      0x02b7cff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
14  CoreFoundation                      0x02add807 __CFRunLoopDoSource1 + 215
15  CoreFoundation                      0x02adaa93 __CFRunLoopRun + 979
16  CoreFoundation                      0x02ada350 CFRunLoopRunSpecific + 208
17  CoreFoundation                      0x02ada271 CFRunLoopRunInMode + 97
18  UIKit                               0x003fcc6d -[UIApplication _run] + 625
19  UIKit                               0x00408af2 UIApplicationMain + 1160
20  Zag Map                             0x00002ca0 main + 102
21  Zag Map                             0x00002c31 start + 53
    terminate called after throwing an instance of 'NSException'

Мои NSArray и NSMutableArray выглядят нормально, учитывая, что они вышли прямо из работающего UITabBar.Он вернул три объекта, затем два.Я надеюсь, что я просто пропускаю что-то глупое здесь.Любые идеи, которые я был бы очень признателен.

Ответы [ 3 ]

2 голосов
/ 21 ноября 2010

Сообщение об исключении говорит вам, что именно не так:

'Непосредственное изменение панели вкладок, управляемой контроллером панели вкладок, недопустимо.'

Вместо этого установите свойство viewControllers контроллера панели вкладок.

1 голос
/ 21 ноября 2010
NSMutableArray *viewControllersCopy = [[tabBarController viewControllers] mutableCopy];
[viewControllersCopy removeObjectAtIndex:2];
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy];
[tabBarController setViewControllers:modifiedViewControllers animated:NO];
0 голосов
/ 27 февраля 2017

Вы можете сделать это-

 tabBarController.selectedIndex = 1; // set index according to your requirement
...