尝试从我的DetailViewController中的save:方法[self.parentViewController.tableView reloadData]
获取我最喜欢的错误:请求成员'tableView',而不是结构或联合。
包含我的RootViewController的标题,并将parentViewController作为RootViewController输入无效。
我有什么拙劣的?
答案 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];