Задать вопрос

Objective-C. Как вызвать метод из другого класса?

Здравствуйте! Только начинаю изучать Objective C и постигать основы ООП.
Собственно, вопрос:
есть контроллер вида ViewController.
В интерфейсе файла ViewController.h объявлены методы resumeGame и pauseGame:
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIView *viewRocket;
@property (weak, nonatomic) IBOutlet UIView *viewBall;
@property (weak, nonatomic) IBOutlet UIView *viewBucket;
@property (weak, nonatomic) IBOutlet UILabel *viewScore;

- (void)resumeGame;
- (void)pauseGame;

@end

Есть класс AppDelegate, и на события блокировки экрана устройства и разблокировки нужно поставить вызов pauseGame и resumeGame из ViewController.

- (void)applicationWillResignActive:(UIApplication *)application
{
    //Здесь нужен вызов pauseGame  
}


Я импортирую файл #import "ViewController.h", затем в методе applicationWillResignActive пишу вызов [ViewController pauseGame], на что получаю ошибку No known class method for selector "pauseGame".

Пробовал создать экземпляр класса:
ViewController* object = [[ViewController alloc] init];
и вызвать
[object pauseGame];

Так работает: билд компилируется, но некорректно, да и ругается на какой-то BAD_ACCESS (думаю что-то связано с отведением памяти).

Кажется, есть какой-то простой способ и он находится на поверхности, но никак не могу нащупать.

Прошу помощи и, пожалуйста, если можно, опишите подробней как правильно объявить метод в одном классе, как правильно сделать вызов в другом?

P.S. Надеюсь, ничего не напутал в терминологии, только учусь. Извините, если вопрос уже поднимался.
  • Вопрос задан
  • 5226 просмотров
Подписаться 6 Оценить Комментировать
Решения вопроса 1
Flanker_4
@Flanker_4
не все так просто и зависит от "архитекрутры". Если вы использовали стандартные шаблоны при создании проекта, то у вас по идее доступен UINavigationController
ну или же доступен сам это UIViewController. Точнее можно сказать, только если я вижу код метода
application:didFinishLaunchingWithOptions:

В этом методе вам нужно запомнить этот UIViewController в переменную, которая будет объявленна в AppDelegat'e и позже ее вызвать в этих методах.
А вообще, Ваша задача решается проще

в методе viewDidLoad класса ViewController
в конце добавляете

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(pauseTheTimer:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];


stackoverflow.com/questions/9247654/iphone-applica...
плюс добавлеете метод
-(void) pauseTheTimer:(NSNotifycation*)notify{
   [self pauseGame];
}

Так же следует почитать про работу NSNotificationCenter и паттерна обсервер (observer)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rsi
software engineer
habrahabr.ru/post/103221
Если кратко то - className methodName и сделать импорт необходимого класса
Ответ написан
@MagoVinch
Реализуйте синглтон и запросто вызывайте из него функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы