2014-12-03 58 views
1

我目前有一個locationManager(不是CLLocationManager)singleton,它在應用程序啓動時獲取我的位置,並管理應用程序中其餘位置服務。從Singleton對象呈現iOS 8 UIAlertController

當初始化位置管理器(如果狀態被拒絕)時會觸發警告提示更改授權狀態。由於它是一個無法顯示的對象,我無法顯示它,而且我一直在尋找其他選項,但大多數都是黑客。實際上可以用這種方式呈現嗎?

在此先感謝

回答

5

我確信有些人會爭論你是否應該。有了這樣說,你可以通過這樣做:

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

應當注意的是,如果您使用的是Mac應用程序,而不是到iOS,多個窗口可能存在,你可能要使用的關鍵窗口。這可能偶爾會成爲系統窗口,因此您應該注意這一點。這裏有一個文章,解釋差異:

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 – 2014-12-03 18:10:51

+0

@AaronBrager - 這似乎更多地涉及到Mac應用程序,但我認爲它是相關的,所以我添加了一個鏈接到該線程的附錄,以及演示'keyWindow'方法。還有什麼你認爲應該在那裏? – Logan 2014-12-03 18:34:26

+0

我要嘗試你的Logan方法並回寫。代碼給你帶來問題的場景是什麼? – 2014-12-04 01:33:49

1

您可以設置主視圖控制器對象作爲觀察員通過Notification Center通知AuthorizationDenied。當它被拒絕時發佈該通知,並且您的視圖控制器將會收到通知。

在你View Controller加載:

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

在你的單例類:

[[NSNotificationCenter defaultCenter] postNotificationName:@"AuthorizationDenied" object:nil]; 
相關問題