嘗試[self.parentViewController.tableView reloadData]
從我的DetailViewController中的save:方法,但得到我最喜歡的錯誤:請求成員'tableView'的東西不是結構或聯合。嘗試重新加載我的parentViewController的數據,但失敗
包含我的RootViewController的標題,並將父視圖控制器作爲RootViewController鑄造成無效。
我有什麼拙劣的?
嘗試[self.parentViewController.tableView reloadData]
從我的DetailViewController中的save:方法,但得到我最喜歡的錯誤:請求成員'tableView'的東西不是結構或聯合。嘗試重新加載我的parentViewController的數據,但失敗
包含我的RootViewController的標題,並將父視圖控制器作爲RootViewController鑄造成無效。
我有什麼拙劣的?
嘗試:
[((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];
試試這個:
MyParentControllerClass *parent = (MyParentControllerClass *) self.parentViewController;
[parent.tableView reloadData];
明智的設計,一個控制器直接發送消息到另一個c的視圖是一個壞主意ontroller。相反,你應該在tableview的控制器中有一個其他對象可以調用的方法。這會阻止你將代碼轉化爲意大利式麪條,在這種意大利式麪條中,你永遠不知道哪個控制器/對象正在改變UI。
self.parentViewController.tableView
不起作用的原因是它只被定義爲沒有tableView
屬性的通用UIViewController
。如上所述,將它投射到適當的班級將消除該信息。
您也可以使用[self.parentViewController tableview]
調用,該調用不會產生錯誤,因爲它將該屬性視爲方法調用。