2013-02-27 37 views
3

我有2個班geoViewControllergeoMainViewController目標C - 從另一個類

調用方法我在geoMainViewController的方法稱爲getFoo

它看起來像這樣:

- (NSString *)getFoo 
{ 

NSString* foo = @"This is foo"; 

return foo; 

} 

我想從geoViewController類呼叫getFoo

我在我的geoViewController m文件中有#import "geoMainViewController.h"

我試圖實例化geoMainViewController類並調用從viewDidLoad中的getFoo方法在我geoViewController類是這樣的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    geoMainViewController* mainVC = [[geoMainViewController alloc] init]; 

    NSString* myFoo = [mainVC getFoo];  

} 

好像被實例化geoMainViewController類不錯,但我正在上NSString* myFoo = [mainVC getFoo];錯誤

的錯誤是 - 對「geoMainViewController」不可見的@interface聲明選擇「的getFoo」

我河畔e我錯過了一個步驟,因爲我對Objective C非常陌生,我只是不確定我做錯了什麼。

對此的任何幫助將是偉大的。

謝謝!

回答

5

在你geoMainViewController.h你應該申報的選擇可見:

-(NSString *)getFoo; 
+2

雖然這裏有更多的險惡, OP似乎並不理解你不應該創建視圖控制器的實例,該視圖控制器沒有連接到視圖層次結構,以便只調用一個方法。 – trojanfoe 2013-02-27 07:42:40

+1

同意。應該使用實例變量,並且viewDidLoad方法不應該是視圖控制器初始化的位置。 – erran 2013-02-27 07:44:32

+0

我正在回答所問的問題。如果我必須用命名約定,MVC實踐,糾正'UIViewController'實現等來圍繞我的問題,我會建議盯着整個iOS開發。 – graver 2013-02-27 07:47:27

1

你把- (NSString *)getFoogeoMainViewController.h? 您必須通過.h文件使這些方法在對象的外部可見,以便其他對象知道它們響應哪個選擇器。 autoComplete是否在每次機會中填寫消息?

#import <Foundation/Foundation.h> 

@interface 
{ 

} 

@property (nonatomic,strong) ; 
@property (nonatomic,strong) ; 
@property (nonatomic, strong) ; 

- (NSString *)getFoo 
@end 

編輯:(您也可以只讓富屬性的方式)

1

你在你的頭文件中聲明瞭嗎?

頭文件包含.h文件中的所有函數聲明,並且只將.h文件包含在您的類中。所以它取決於.h文件。 .h文件將具有所有功能作爲.m文件。

希望它可以幫助你。

+1

你沒有什麼可說的創建一個視圖控制器只是爲了調用它的方法? – trojanfoe 2013-02-27 07:47:09

+0

忘了abt那... – lakesh 2013-02-27 07:48:45

0

您誤解了如何使用視圖控制器。雖然你可以在技術上創建一個視圖控制器的實例來調用它的一個方法,但你不應該這樣做。通常的做法是視圖控制器是視圖層次結構的一部分,當你有權訪問該實例時,你可以調用它。你在這裏錯過了一些基本的東西

你的實際錯誤是一個missinh方法聲明,我會懷疑,但是你首先要解決更大的問題。

+0

感謝您的反饋意見。我明白你在說什麼,但我有一個完全一樣的功能,我需要能夠從2個不同的視圖控制器調用它。我試圖避免重複的代碼。會不會有更好的地方來放置這個功能。也許應用程序委託?我的代碼現在正在工作,但我想確保我遵循最佳實踐。謝謝! – Sequenzia 2013-02-27 07:53:00

+0

@Sequenzia這取決於該方法的作用。 – trojanfoe 2013-02-27 08:47:01