模态解除后,iOS UITableView不再调用委托

时间:2016-02-10 14:52:55

标签: ios objective-c uitableview modalviewcontroller

我有一个UITableViewController,除了以下情况外,它可以正常工作。

我按如下方式创建并呈现模态视图控制器:

[self.tableView beginUpdates];
NSMutableDictionary *request_params = [NSMutableDictionary new];
InputViewController *inputController = [[InputViewController alloc] initWithParams:request_params 
    continuation:^(UIViewController * thisInputController) {  
      [self complete:request_params success:^() {  
        [self.navigationController dismissViewControllerAnimated:YES completion:nil];  
        [self.tableView endUpdates]; # Added in 
      } failure:nil];  
    } cancel:^{  
      [self.navigationController dismissViewControllerAnimated:YES completion:nil];  
    }];  
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:inputController];  
[self.navigationController presentViewController:nav animated:YES completion:nil]; 

当用户按下“完成”时,InputViewController会调用continuation。 (rightBarButtonItem)并在用户按下'取消' (leftBarButtonItem)。

complete进行网络异步调用,并在完成请求后调用成功块。

在快乐路径中(即称为延续块),一切都很好。但是,当取消块中取消模式对话框时,TableView会完全被清除。滚动有效,但只有已经可见的单元格存在。滚动会导致空UI。代理和数据源似乎设置正确,但它们似乎根本没有被调用。

Before Scroll After scroll

我尝试了多种方法,包括使用委托代替,明确地在主线程中调用dismiss等。我现在不知道该尝试什么。

非常感谢我所遗漏的任何线索,甚至还有关于下一步尝试的指示。

我见过

这两种情况似乎都是数据与视图不同步的情况, 但是这两种情况都不适用,因为如果我采取快乐的路径(表格中的数据会发生变化),并且在取消路径中,我的工作就完全没有了。

[更新]:此外,我的行动作不再有效。之前&在快乐的道路上一切都很好。取消后,不再进行编辑操作: - (

[更新]:添加了遗漏的beginUpdatesendUpdates来电,以识别问题。

1 个答案:

答案 0 :(得分:1)

@Alex是对的。当您从它们顶部解除模态视图时,tableView不会中断。

但是,当beginUpdates忘记endUpdates时,它们确实表现得很奇怪。事实证明,取消时,dismissViewController被调用,但endUpdates不被调用。

确保您的beginUpdatesendUpdates匹配,否则tableView的行为会非常奇怪。