从app delegate调用视图控制器方法

Net*_*yke 10 iphone methods xcode delegates objective-c

我试图从app委托调用视图控制器中的方法,但是Xcode说选择器'myMethodHere'没有已知的类方法.这是我的代码:

AppDelegate.m:

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

MainViewController.m:

-(void) myMethodHere {
     [..]
}
Run Code Online (Sandbox Code Playgroud)

Lou*_*uie 13

我会尝试

MainViewController * vc = [[MainViewController alloc]init];
[vc myMethodHere];
[vc release];
Run Code Online (Sandbox Code Playgroud)
  1. 确保在应用程序委托.m文件中导入MainViewController
  2. 确保将"myMethodHere"添加到MainViewController .h文件中

  • 我不太确定这是否有效.这不会创建您尝试访问的视图的另一个实例吗?假设您正在尝试在该视图控制器中运行方法,但该方法依赖于该视图中的某些UI /数据,然后执行此操作将无法工作,因为您创建的实例不包含该数据对?? (3认同)

tro*_*foe 11

您想要调用实例方法时尝试调用方法.如果视图控制器是视图控制器,那么您应该可以这样调用它:

UIWindow *window = [UIApplication sharedApplication].keyWindow;
MainViewController *rootViewController = window.rootViewController;
[rootViewController myMethodHere];
Run Code Online (Sandbox Code Playgroud)

如果它不是根视图控制器,那么你将不得不找到一些其他方法来获取实例,然后调用上面最后一行中的方法.


lui*_*sas 7

如果要访问故事板上的视图控制器,可以使用AppDelegate中的以下代码块:

MainViewController *rootViewController = (MainViewController*)self.window.rootViewController;
[rootViewController aMethod];
Run Code Online (Sandbox Code Playgroud)

请记住添加导入.