我正在使用UITabBar
创建一个用于导航的应用程序,为了获得更多标准的5个标签,Apple为您提供了一个名为JFATabBarController的框架。
框架是用Objective-C编写的,而我的应用程序的其余部分是用Swift编写的。在其中一个标签中,我有一个按钮列表,当用户按下按钮时,它开始使用AVPlayerViewController
播放视频。视频在纵向模式下播放效果很好,但是一旦手机转为横向,我的应用就会崩溃并在控制台中出现以下错误:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 9223372036854775807 beyond bounds [0 .. 8]'
*** First throw call stack:
(0x181c56e38 0x1812bbf80 0x181b36ebc 0x100157efc 0x186daf4b4 0x18714d0f0 0x18714a3b4 0x186ea462c 0x186ea4494 0x18740c32c 0x1870ba244 0x18740c124
0x186dd8e90 0x186df09c8 0x18740bfe4 0x18709bf30 0x18709d190 0x186e24b6c 0x186e244a0 0x186e1ac20 0x186da21c8 0x181bf8eac 0x181bf86cc 0x181bf844c
0x181c61494 0x181b36788 0x18253e89c 0x186da183c 0x187060cf0 0x187060c60 0x186da164c 0x186da0eb8 0x186e106b0 0x18341d86c 0x18341d358 0x181c0d85c
0x181c0cf94 0x181c0acec 0x181b34d10 0x18341c088 0x186e09f70 0x10007c138 0x1816d28b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
应用程序是纵向的,所以甚至不可能转向横向。
在JFATabBarController.m第119行抛出错误Thread 1: signal SIGABRT
:
UIButton *oldButton = self.tabButtons[self.selectedIndex];
tabButtons
是JFATabBarController.m第73行定义的NSMutableArray
:
- (NSMutableArray *)tabButtons
{
if (!_tabButtons)
{
_tabButtons = [NSMutableArray new];
}
return _tabButtons;
}
self.selectedIndex
与当前所选标签项关联的视图控制器的索引。,如Apple文档中所述。
现在,我做了一些研究,发现9223372036854775807是最大的可能变量,也是常量NSNotFound
。我还读过我需要使用NSNotFound
语句检查if
,但是当我尝试时,应用程序仍会崩溃并将错误移至if
语句。
所以目前我有点想法,我希望有一些技术娴熟的人可以帮助我!谢谢!
答案 0 :(得分:2)
正如您所指出的,self.selectedIndex
等于NSNotFound
您可以按如下方式更新代码:
if (self.selectedIndex != NSNotFound) {
UIButton *oldButton = self.tabButtons[self.selectedIndex];
...
}
如果self.selectedIndex可以设置为其他无效值,您可以更新条件(以确保它在边界内),如下所示:
if (self.selectedIndex >= 0 && self.selectedIndex < [self.tabButtons count]) ...
仅当self.selectedIndex >= 0
未签名时才需要 * selectedIndex
。