Вызов метода контроллера представления из делегата приложения - PullRequest
10 голосов
/ 15 ноября 2011

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

AppDelegate.m:

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

MainViewController.m:

-(void) myMethodHere {
     [..]
}

Ответы [ 5 ]

13 голосов
/ 15 ноября 2011

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

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

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

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

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

6 голосов
/ 17 ноября 2012

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

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

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

1 голос
/ 04 октября 2015

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

    UIApplication.sharedApplication().keyWindow?.rootViewController?.yourMethodName()
0 голосов
/ 15 ноября 2011

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

 -(void) myMethodHere;

в MainViewController.h

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...