2009-12-18 135 views
0

嘗試[self.parentViewController.tableView reloadData]從我的DetailViewController中的save:方法,但得到我最喜歡的錯誤:請求成員'tableView'的東西不是結構或聯合。嘗試重新加載我的parentViewController的數據,但失敗

包含我的RootViewController的標題,並將父視圖控制器作爲RootViewController鑄造成無效。

我有什麼拙劣的?

回答

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]; 
0

試試這個:

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

明智的設計,一個控制器直接發送消息到另一個c的視圖是一個壞主意ontroller。相反,你應該在tableview的控制器中有一個其他對象可以調用的方法。這會阻止你將代碼轉化爲意大利式麪條,在這種意大利式麪條中,你永遠不知道哪個控制器/對象正在改變UI。

self.parentViewController.tableView不起作用的原因是它只被定義爲沒有tableView屬性的通用UIViewController。如上所述,將它投射到適當的班級將消除該信息。

您也可以使用[self.parentViewController tableview]調用,該調用不會產生錯誤,因爲它將該屬性視爲方法調用。

相關問題