2010-11-19 4 views
1

Ich habe also einen UITabView Controller, der im Interface Builder erstellt wurde. Die Titel- und Bildeigenschaften von UITabBarItem wurden in IB festgelegt. Ein Tab Bar Controller-Objekt ist in der Xib vorhanden und alle notwendigen Verbindungen werden hergestellt. Ich kann einfache Befehle wieUITabBar - setItems: animiert: Abstürze

aufrufen [tabBarController setSelectedIndex: 1];

Alles funktioniert gut, aber wenn ich die Eigenschaft "Elemente" setze, stürze ich ab. Vielleicht habe ich ein Speicherverwaltungsproblem? Hier

ist das Krachen Code:

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

* Beenden app aufgrund nicht abgefangene Ausnahme 'NSInternalInconsistencyException' Grund: 'Direkt eine Tab-Leiste Modifizieren von einer Tab-Leiste Controller verwaltet wird, nicht erlaubt' * Anrufstapel auf den ersten Wurf:

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' 

Mein NSArray und NSMutableArray erscheinen in Ordnung zu sein wenn man bedenkt sie gerade aus dem funktionierenden UITabBar kam. Es gab drei Objekte zurück, dann zwei. Ich hoffe, ich übersehe hier nur etwas Dummes. Irgendwelche Ideen würde ich wirklich schätzen.

+0

Können Sie Ausnahmemeldung erhalten? Das würde mir wirklich helfen. – tia

+0

Klicken Sie auf "Breakpoints" und dann auf "Build and Debug". Wenn es abstürzt, wird es einen detaillierteren Fehler geben, der Ihnen mit mehr Informationen sagen wird, was schief geht. –

Antwort

2

Die Meldung Ausnahme sagt Ihnen genau, was falsch ist:

‚eine Tab-Leiste verwaltet von einer Tab-Leiste Controller Direkt ist nicht erlaubt zu ändern.‘

Setzen Sie stattdessen die Eigenschaft viewControllers des Tab-Bar-Controllers.

+0

Danke, das hat funktioniert. Ich hatte den gleichen Code von anderen erfolgreich verwendet gesehen. – mosca1337

1
NSMutableArray *viewControllersCopy = [[tabBarController viewControllers] mutableCopy]; 
[viewControllersCopy removeObjectAtIndex:2]; 
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy]; 
[tabBarController setViewControllers:modifiedViewControllers animated:NO]; 
+0

Danke funktioniert wie Charme – sairam

0

können Sie mögen tun, dass-

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