2011-11-15 63 views
10

我想從應用程序委託調用視圖控制器中的方法,但Xcode說沒有已知的選擇器'myMethodHere'的類方法。這裏是我的代碼:從應用程序委託調用視圖控制器方法

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [..] 
      [MainViewController myMethodHere]; 
    [..] 
    return YES; 
} 

MainViewController.m:

-(void) myMethodHere { 
    [..] 
} 

回答

11

我會嘗試

MainViewController * vc = [[MainViewController alloc]init]; 
[vc myMethodHere]; 
[vc release]; 
  1. 確保導入MainViewController在你的應用程序代理.m文件
  2. 確保您添加「myMethodHere」你MainViewController .h文件
+2

林寫的也不太清楚,如果這個工程雖然。這是否不會創建您嘗試訪問的視圖的另一個實例?假設你試圖在該視圖控制器中運行一個方法,但是該方法依賴於該視圖中某些UI /數據,那麼這樣做將不起作用,因爲你創建的實例不包含該數據對?? – Supertecnoboff

0

嘗試寫

-(void) myMethodHere; 

MainViewController.h

11

您正在嘗試當您想調用實例方法時,請調用方法。如果視圖控制器是視圖控制器,那麼你應該能夠這樣稱呼它:

UIWindow *window = [UIApplication sharedApplication].keyWindow; 
MainViewController *rootViewController = window.rootViewController; 
[rootViewController myMethodHere]; 

如果不是根視圖控制器,那麼你就必須找到得到的持有的其他方式該實例,然後像上面最後一行那樣調用該方法。

5

如果你想獲得一個視圖控制器上的故事板,你可以使用這個代碼塊從AppDelegate中:

MainViewController *rootViewController = (MainViewController*)self.window.rootViewController; 
[rootViewController aMethod]; 

記得添加導入。

1

在斯威夫特,你可以像這樣

UIApplication.sharedApplication().keyWindow?.rootViewController?.yourMethodName() 
相關問題