【发布时间】:2014-05-08 07:41:25
【问题描述】:
我正在构建一个使用大量网络服务的 iOS 应用。
该应用程序有一个 UItabBarController 作为它的根 VC。
在我的一个控制器中,我将 viewController 推送到 UINavigationController 上。我推入堆栈的 ViewController 是一个 UITableViewController,它有一个 UITableView 和来自网络的数据。我在用户在数据中下降的每个级别上重新启用控制器。然后,在最后一级,我调用了一个 Web 服务,然后希望整个 UITableViewController 被解除并显示原始视图控制器。
看起来是这样的:
ViewControllerA (UIViewController) -> 用户点击一个按钮 - 将ViewControllerB 推到它上面。 (UINavigationController)。
完成 ViewControllerB 后,我需要将其关闭,并显示 ViewControllerA 和结果。
在 ViewControllerB 中,我在 NSNotification 方法中做了这样的事情:
if ([errorString hasPrefix:@"No descendants"]){
UINavigationController *navigationController =
[self.tabBarController.viewControllers objectAtIndex:1];
BBSearchViewController *searchViewController =
navigationController.viewControllers[0];
searchViewController.categoryId = self.categoryId;
if (searchViewController.brwosingCategoriesFromSearchPage){
[[BBDataStore sharedDataStore]deRegisterForNotifications:self];
[self.navigationController popToRootViewControllerAnimated:NO];
这会导致控制台出现此错误:
> 2014-05-08 09:32:16.306 TestApp[36948:60b] Finishing up a navigation transition
in an unexpected state. Navigation Bar subview tree might get corrupted.
2014-05-08 09:32:16.780 TestApp[36948:60b] Unbalanced calls to begin/end
appearance transitions for <ViewControllerA: 0xd08aa00>.
谁能告诉我我在这里做错了什么?
【问题讨论】:
-
您是否在每次单击表格单元格时创建
UITableViewController的新实例?为什么不只是重新加载表数据并使用一个控制器? -
是的,我在每次单击单元格时创建一个新实例。我不想重新加载数据,因为用户需要能够备份链。所以,第 1 级 -> 第 2 级 - 第 3 级。然后,如果他们愿意,可以回到第 2 级或第 1 级。你认为这是我的问题的原因吗?
-
只用一个视图控制器试试。当用户单击单元格时,获取下一级数据并重新加载表。还要跟踪堆栈中的当前级别。当单击后退按钮时,从堆栈中弹出。堆栈为空,然后弹出表格视图控制器,否则您需要显示上一级的数据。
-
用户可以通过数以百计的关卡。数据集相当大。不过我会试试的。谢谢。
-
那么最好只保留一个 ViewController。这样更容易处理。
标签: ios objective-c uiviewcontroller