在应用程序启动时预加载 UITabBar 选项卡时出现问题(崩溃)
Posted
技术标签:
【中文标题】在应用程序启动时预加载 UITabBar 选项卡时出现问题(崩溃)【英文标题】:Trouble preloading UITabBar tabs on application launch (crash) 【发布时间】:2014-03-07 03:10:33 【问题描述】:我在 RSS 新闻阅读器中有 8 个标签。每个选项卡链接到一个导航控制器,该控制器链接到一个包含表视图的 masterViewController。我正在尝试遍历所有选项卡以在启动时预加载其表数据。我在 appDelegate didFinishLaunchingWithOptions 方法中尝试了以下代码:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
NSArray *myViewControllers = tabBarController.viewControllers;
for (UINavigationController *navViewController in myViewControllers)
[navViewController.topViewController view];
但是,每当我启动应用程序时,我都会收到以下错误消息:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI
objectAtIndex:]: index 2147483647 beyond bounds [0 .. 7]'
这里有什么问题?
【问题讨论】:
这很奇怪......当您调用超出数组中当前内容的索引时会发生该错误。但是,由于您正在执行没有索引的 for 循环,因此它来自该 for 循环是没有意义的……您确定它来自这部分代码吗? 哦,刚刚想到一个可能的原因……一秒…… 【参考方案1】:我怀疑问题可能是这样的
NSArray *myViewControllers = tabBarController.viewControllers;
正在返回一个 UIViewController
s 数组(我认为应该如此),但您的 for 循环正在寻找 UINavigationController
s。
我不知道你想用那个循环做什么,因为你没有分配或使用 [navViewController.topViewController view];
做任何事情,但是如果你想访问你的 myViewControllers
数组中的视图控制器的视图, 使用:
for (UIViewController *viewController in myViewControllers)
variableWhatever = [viewController view];
【讨论】:
我正在关注这个帖子:link,以便在应用程序启动时预加载我所有选项卡的表数据。但是他们的解决方案不起作用,所以我想在我的 masterViewController 而不是 navigationController 上调用“view”。您的解决方案消除了崩溃,但仍然不会导致我的标签页预加载。 总而言之,我只是想遍历我所有的 masterViewControllers,并在它们上调用视图来强制加载每个选项卡的表数据。以上是关于在应用程序启动时预加载 UITabBar 选项卡时出现问题(崩溃)的主要内容,如果未能解决你的问题,请参考以下文章
在应用程序启动时预加载 Ext JS 和自定义 JavaScript 文件
UITabBar 中的 UICollectionView 在首次加载时显示错误的位置