2014-02-05 5 views
1

У меня есть класс под названием game.h, и у него есть метод экземпляра, называемый паузой. Как я могу это назвать из делегата приложения, когда моя игра переходит в фоновый режим?Функция вызова экземпляра из делегата приложения

Я знаю, что вы используете - (void)applicationWillResignActive:(UIApplication *)application, но я хочу вызвать паузу в моем существующем экземпляре.

+0

Ваше приложение делегат будет нужна ссылка на конкретный экземпляр игры вы хотите сделать паузу. Здесь недостаточно информации, чтобы предложить, как предоставить этот экземпляр делегату приложения. Кто создает игру и может сделать ее доступной для делегата приложения? – Jonah

+0

Это не обязательно верно Иона. Фактически, предоставление делегату приложения ссылки на класс игры для отслеживания может быстро стать беспорядочным. Вы можете просто использовать уведомления. – nhgrif

+0

Это skscene в контроллере начального представления. – maxhud

ответ

6

Использование NSNotificationCenter.

В вашем случае класса game добавьте self в качестве наблюдателя в уведомление UIApplicationWillResignActiveNotification.


В вашем game классе, где-то, что вам нужно следующий фрагмент кода:

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

Это, вероятно, пойти в init.

Это уведомление увольняется applicationWillResignActive. Метод addObserver:selector:name:object: устанавливает ваш объект, чтобы вызвать селектор, который вы ему сообщаете, всякий раз, когда он получает это уведомление. '


Не забудьте удалить self в качестве наблюдателя в dealloc.

В game.m «s @implementation:

- (void)dealloc { 
    // If not using ARC, then be sure to [super dealloc]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 
+0

Как удалить себя как наблюдателя? – maxhud

+1

@maxhud Просто вызовите 'removeObserver: name: object:' (тот же синтаксис, что и выше, кроме параметра 'selector'). Большинство людей добавят наблюдателя при загрузке объекта и удаляют его в методе 'dealloc'. – Rob

+0

@Rob, где я могу поместить этот код? (где is dealloc) – maxhud

Смежные вопросы