Как зарегистрироваться для UIApplicationWillEnterForegroundNotification в MonoTouch

#iphone #xamarin.ios

#iPhone #xamarin.ios

Вопрос:

У меня проблема в том, что метод viewWillAppear для UIView не запускается, когда приложение возвращается из фонового режима. Это проблема, поскольку на главном экране моего приложения отображаются значения, которые извлекаются из пользовательских настроек, и если пользователь изменил их, пока приложение работало в фоновом режиме, мне нужно обновить экран. Я прочитал, что для UIApplicationWillEnterForegroundNotification следует зарегистрироваться с помощью NSNotificationCenter.

Как это сделать в MonoTouch? Или кто-нибудь знает альтернативный способ гарантировать, что экран всегда поддерживается в актуальном состоянии, даже при возвращении из фонового режима?

Ответ №1:

Вы могли бы попробовать что-то вроде:

 //Register for the notification somewhere in the app
NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.WillEnterForegroundNotification, EnteredForeground);

//snip

void EnteredForeground (NSNotification notification)
{
    // do your stuff here
}
  

Имейте в виду, что вам нужно будет сделать это для каждого контроллера представления, который вы хотели бы обновить при входе в фоновом режиме!

Комментарии:

1. Спасибо, Люк. Немного неприятно, что viewWillAppear не запускается в случае возврата приложения из фонового режима. Но я попробую решение, которое вы предлагаете здесь. Спасибо.

2. Люк, хороший ли дизайн для использования NSNotificationCenter здесь? Не было бы лучше переопределить соответствующий метод в AppDelegate, а затем обработать обновление оттуда? Или аргумент в пользу того, что NSNotifiactionCenters допускает слабую связь?

3. Я предполагаю, что вам также следует вызвать соответствующий removeObserver, когда ваш просмотр будет завершен. В моем UIViewController я сделал это в viewWillAppear и viewWillDisappear, которые, несмотря на все их ошибки, по-видимому, вызываются надежно и симметрично.