2014-12-03 5 views
1

В настоящее время у меня есть singleManager locationManager (не CLLocationManager), который получает мое местоположение при запуске приложения и управляет остальными услугами определения местоположения в приложении.Представление iOS 8 UIAlertController от Singleton Object

При инициализации диспетчера местоположений, если состояние отклонено, запускается предупреждение с предложением изменить состояние авторизации. Поскольку это nsobject, я не могу представить его, и я искал другие варианты, но большинство из них - хаки. Действительно ли это можно представить так?

Заранее спасибо

ответ

5

Я уверен, что некоторые из них будут спорить о том, действительно ли вы должны. При этом, как говорится, вы можете, делая это:

[[(<#YourAppDelegate#> *)[UIApplication sharedApplication].delegate window].rootViewController presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>]; 

Следует отметить, что если вы используете приложение Mac, в отличие от прошивки, несколько окон могут присутствовать, и вы можете использовать ключевое окно , Иногда это может быть системное окно, поэтому вы должны знать об этом. Вот после объяснения различия:

https://stackoverflow.com/a/21698751/2611971

Если вы предпочитаете, чтобы представить на ваш keyWindow, вы могли бы использовать это:

[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>]; 
+0

'window' может быть' nil' в некоторых случаях. См. Http://stackoverflow.com/a/21698751/1445366 –

+0

@AaronBrager - похоже, это больше относится к Mac Apps, однако я считаю, что это актуально, поэтому я добавил добавление, связанное с этим потоком, а также демонстрацию, показывающую 'keyWindow'. Что-нибудь еще, что вы думаете, должно быть там? – Logan

+0

Я собираюсь попробовать свой метод Logan и написать обратно. Каковы сценарии, которые код дал вам проблемы? –

1

Вы можете настроить свой основной объект вид контроллера в качестве наблюдателя для сообщения AuthorizationDenied через Notification Center. И опубликуйте это уведомление, когда оно будет отклонено, и ваш контроллер просмотра получит уведомление.

В вашем View Controller загрузки:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(authorizationDenied:) name:@"AuthorizationDenied" object:nil]; 

В вашем одноплодном классе:

[[NSNotificationCenter defaultCenter] postNotificationName:@"AuthorizationDenied" object:nil]; 
Смежные вопросы