1

我在這裏進行的是顯示搜索結果列表的頁面。當您點擊搜索按鈕時,它會打開一個模式窗口,您可以在其中更改搜索條件。當你點擊完成時,它會調用模態窗口上的updateSearch方法,該窗口又應該調用父窗口上的updateSearch。我得到的錯誤是從模態窗口調用父視圖控制器的方法時出錯

Receiver type 'ehrxCMView' for instance message does not declare a method with selector 'updateSearch' 

這是對父視圖 - 控制

- (void)updateSearch 
{ 

} 

這裏的方法我的模態窗口方法

- (IBAction)updateSearch:(id)sender 
{ 
    ehrxCMView *parent = (ehrxCMView*)self.parentViewController; 
    parent.selectedOptions = self.selectedOptions; 
    [parent updateSearch]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

我一個在這裏想到的是模態窗口是在一個導航控制器,所以我想也許我需要經歷,然後到父控制器?

回答

2

任何時候我看到self.parentViewController ....這是一種代碼味道。

不是像這樣鏈接視圖控制器,而是將一個視圖控制器設置爲彈出控制器上的委託方法。彈出窗口然後可以調用它的代理來告訴它updateSearch。

這是一種更好,更易維護的方法,您應該養成這樣的習慣。

+0

好的建議。在更抽象的層面上,'self.parentViewController'顯然不是Jhorra認爲它的價值。當調試這樣的問題時,找出計算機認爲正在發生的事情總是一個好主意,然後確定它與你想象中的不同之處。 – Olie 2012-03-21 17:24:39

+0

感謝您的建議,我仍然對此感到陌生。你能指點我更多關於如何將控制器設置爲代表的信息嗎?我理解這個概念,但我對IOS還不夠熟悉。 – Jhorra 2012-03-21 17:37:07

+0

看看Cocoa基礎知識指南,其中有關於代表的部分。 https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18 – bandejapaisa 2012-03-21 17:46:04

相關問題