Вызов метода контроллера представления из делегата приложения

Я пытаюсь вызвать метод в контроллере представления из делегата приложения, но Xcode говорит, что нет известного метода класса для селектора 'myMethodHere'. Вот мой код:

AppDelegate.m:

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

MainViewController.m:

-(void) myMethodHere {
     [..]
}

5 ответов

Решение

Я бы попробовал

MainViewController * vc = [[MainViewController alloc]init];
[vc myMethodHere];
[vc release];
  1. Убедитесь, что вы импортировали свой MainViewController в ваш делегат приложения .m файл
  2. убедитесь, что вы добавили myMethodHere в свой MainViewController .h файл

Вы пытаетесь вызвать метод класса, когда хотите вызвать метод экземпляра. Если контроллер представления является корневым контроллером представления, то вы должны быть в состоянии вызвать его таким образом:

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

Если это не контроллер корневого представления, вам придется найти другой способ получить экземпляр и затем вызвать метод, как в последней строке выше.

Если вы хотите получить доступ к контроллеру представления на доске рассказов, вы можете использовать этот блок кода из AppDelegate:

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

Не забудьте добавить импорт.

В Swift вы можете написать это так

    UIApplication.sharedApplication().keyWindow?.rootViewController?.yourMethodName()

Попробуй написать

 -(void) myMethodHere;

в MainViewController.h

Другие вопросы по тегам