NSNotificationCenter addObserver не отвечает - PullRequest
1 голос
/ 23 ноября 2011

В моем приложении (игре) я пытаюсь использовать NSNotificationCenter, чтобы приостановить и возобновить игру, когда нажата либо центральная / главная страница, либо кнопка блокировки. Это код, который я использую:

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(pauseLayer:)
 name:UIApplicationWillResignActiveNotification
 object:self.view.layer.sublayers];

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(pauseLayer:)
 name:UIApplicationDidEnterBackgroundNotification
 object:self.view.layer.sublayers];

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(resumeLayer:)
 name:UIApplicationWillEnterForegroundNotification
 object:self.view.layer.sublayers];

Я экспериментировал с размещением его во многих различных местах, таких как viewDidLoad, viewDidAppear, initWithNibNameOrNil, но, хотя они все вызываются, методы pauseLayer и resumeLayer никогда не вызываются, даже если это делает метод делегата приложения. Почему этот код не работает?

1 Ответ

4 голосов
/ 23 ноября 2011

изменить вызовы addObserver и удалить self.view.layer.sublayers из параметра object.измените его на nil.

РЕДАКТИРОВАТЬ: подробнее

Конечно.Параметр object сообщает NSNotificationCenter, какое уведомление объекта вы хотите наблюдать.Когда вы указываете self.view.layer.sublayers, вы наблюдаете, что UIApplicationWillEnterForegroundNotification и другие отправляются только массивом sublayers.Конечно, массив sublayers не отправляет это уведомление.Когда вы указываете object:nil, вы наблюдаете уведомление от любого объекта.Это уместно в этом случае.Если вы хотите указать объект, это будет [UIApplication sharedApplication].

...