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

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

AppDelegate.m:

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

MainViewController.m:

-(void) myMethodHere {
     [..]
}

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

В Swift вы можете записать это следующим образом

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

Ответ 5

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

 -(void) myMethodHere;

in MainViewController.h