uitabbar - setItems: الرسوم المتحركة: حوادث
-
26-09-2019 - |
سؤال
لذلك لدي وحدة تحكم Uitabview التي تم إنشاؤها في Builder Interface. تم تعيين عنوان وخصائص الصورة في Uitabbaritem في IB. يوجد كائن وحدة تحكم شريط علامات التبويب في XIB ويتم إجراء جميع الاتصالات اللازمة. أنا قادر على استدعاء أوامر بسيطة مثل
TabBarController setSelectedIndex: 1] ؛
كل شيء يعمل بشكل جيد ولكن عندما أقوم بتعيين خاصية "العناصر" ، أعطل. ربما أواجه مشكلة في إدارة الذاكرة؟
هنا هو الرمز المحطم:
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. عاد ثلاثة كائنات ، ثم اثنان. آمل أن أطل على شيء غبي هنا. أي أفكار أقدرها حقًا.
المحلول
تخبرك رسالة الاستثناء بالضبط ما هو الخطأ:
"لا يُسمح بتعديل شريط علامات تبويب مباشرة بإدارته بواسطة وحدة تحكم شريط علامات تبويب."
قم بتعيين وحدة تحكم شريط التبويب viewControllers
الممتلكات بدلا من ذلك.
نصائح أخرى
NSMutableArray *viewControllersCopy = [[tabBarController viewControllers] mutableCopy];
[viewControllersCopy removeObjectAtIndex:2];
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy];
[tabBarController setViewControllers:modifiedViewControllers animated:NO];
يمكنك أن تفعل مثل ذلك-
tabBarController.selectedIndex = 1; // set index according to your requirement