2011-11-15 64 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() 
相关问题