【发布时间】:2014-12-03 15:04:00
【问题描述】:
我目前有一个 locationManager(不是 CLLocationManager)单例,它在应用启动时获取我的位置,并管理应用中的其余位置服务。
在初始化位置管理器时,如果状态被拒绝,则会触发警报提示更改授权状态。由于它是一个 nsobject,我无法展示它,我一直在寻找其他选项,但大多数都是 hack。真的可以这样呈现吗?
提前致谢
【问题讨论】:
标签: ios objective-c core-location
我目前有一个 locationManager(不是 CLLocationManager)单例,它在应用启动时获取我的位置,并管理应用中的其余位置服务。
在初始化位置管理器时,如果状态被拒绝,则会触发警报提示更改授权状态。由于它是一个 nsobject,我无法展示它,我一直在寻找其他选项,但大多数都是 hack。真的可以这样呈现吗?
提前致谢
【问题讨论】:
标签: ios objective-c core-location
我相信有些人会争论你是否应该这样做。话虽如此,您可以这样做:
[[(<#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#>];
【讨论】:
window 在某些情况下可能是 nil。见stackoverflow.com/a/21698751/1445366
keyWindow 方法的演示。您认为还有什么其他内容吗?
您可以通过Notification Center 将主视图控制器对象设置为AuthorizationDenied 通知的观察者。并在被拒绝时发布该通知,您的视图控制器将收到通知。
在您的View Controller 加载中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(authorizationDenied:) name:@"AuthorizationDenied" object:nil];
在你的单例类中:
[[NSNotificationCenter defaultCenter] postNotificationName:@"AuthorizationDenied" object:nil];
【讨论】: