试图重新加载我的parentViewController的数据,但失败了

时间:2009-12-18 01:29:01

标签: iphone cocoa-touch uinavigationcontroller uitableview

尝试从我的DetailViewController中的save:方法[self.parentViewController.tableView reloadData]获取我最喜欢的错误:请求成员'tableView',而不是结构或联合。

包含我的RootViewController的标题,并将parentViewController作为RootViewController输入无效。

我有什么拙劣的?

3 个答案:

答案 0 :(得分:2)

设计明智,让一个控制器直接将消息发送到另一个控制器的视图是个坏主意。相反,你应该在tableview的控制器中有一个其他对象可以调用的方法。这将阻止您将代码变成意大利面,在这种情况下,您永远不知道哪个控制器/对象正在更改UI。

self.parentViewController.tableView不起作用的原因是它只被定义为没有UIViewController属性的通用tableView。如上所述,将它转换为适当的类将消除该消息。

您还可以使用不会产生错误的[self.parentViewController tableview]调用,因为它将属性视为方法调用。

答案 1 :(得分:0)

尝试:

[((MyParentViewControllerClassName *)self.parentViewController).tableView beginUpdates];
[((MyParentViewControllerClassName *)self.parentViewController).tableView reloadData];
[((MyParentViewControllerClassName *)self.parentViewController).tableView endUpdates];

用您的父vc的类名替换MyParentViewControllerClassName

要引用父视图控制器,我总是要做这样的事情,例如:

NSArray *viewControllerArray = [self.navigationController viewControllers];
NSInteger parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

您也可以尝试,按照以下示例:

[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] beginUpdates];
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] reloadData];
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] endUpdates];

答案 2 :(得分:0)

试试这个:

MyParentControllerClass       *parent = (MyParentControllerClass *) self.parentViewController;
[parent.tableView reloadData];