0

删除子视图后,我有一个问题UITableViewController无法重绘更新的单元格。

这是正在发生的事情。在子视图中更改数据后,父视图控制器重新加载源数据数组并通过 PostNotification运行[tableView reloadData] 。触发后,我使用popViewControllerAnimated返回父 UITableViewController(这会将子视图从堆栈中弹出,并显示控制器上一层)。

但是,我更新的数据没有出现在父视图控制器中!根据调试器,单元格的标签已经更新,但可见标签没有改变。但是,如果我滚动表格,暂时将更新的单元格移出视图,当它重新出现时,标签就会更新!

我也尝试通过viewWillAppear调用[tableView reloadData]但问题仍然存在。

以下是一些可能有用的附加信息。我有一个结构如下的 3 个视图:

1/  SettingsViewController : UITableViewController
2/  -- UserView : UITableViewController
3/  ---- UserDetailsView : UIViewController <UIActionSheetDelegate>

我从 UserView 内部调用 UserDetailsView,如下所示:

 UserDetailsView *userDetailsView = [[UserDetailsView alloc] init];
 [self.navigationController pushViewController:userDetailsView animated:YES];

如果我返回最顶层的控制器(SettingsViewController),然后加载有问题的控制器(UserView),一切都会正确绘制。只有从子视图返回时才会出现此问题。

预先感谢您的建议。

4

1 回答 1

0

经过大约一个小时的配对编码后,终于解决了这个问题。

过了一会儿,我们注意到每当我们发送 reloadData 消息时tableView 总是为空。正如您在 Objective C 中可能知道的那样,空对象毫无怨言地接受任何消息。

事实证明,“某人”(咳咳,抱歉是我)在头文件中定义了这一行。

 UITableView *tableView;

现在你的智能 cookie 会知道,因为我们扩展了 UITaleViewController,我们不需要自己创建指向 tableView 的指针。实际上,我已经用一个空对象替换了继承的 tableView 成员。

谜团已揭开。希望这对其他人也有帮助!:D

于 2010-02-03T13:05:58.270 回答