【问题标题】:Presenting iOS 8 UIAlertController from Singleton Object从单例对象呈现 iOS 8 UIAlertController
【发布时间】:2014-12-03 15:04:00
【问题描述】:

我目前有一个 locationManager(不是 CLLocationManager)单例,它在应用启动时获取我的位置,并管理应用中的其余位置服务。

在初始化位置管理器时,如果状态被拒绝,则会触发警报提示更改授权状态。由于它是一个 nsobject,我无法展示它,我一直在寻找其他选项,但大多数都是 hack。真的可以这样呈现吗?

提前致谢

【问题讨论】:

    标签: ios objective-c core-location


    【解决方案1】:

    我相信有些人会争论你是否应该这样做。话虽如此,您可以这样做:

    [[(<#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
    • @AaronBrager - 这似乎更多地与 Mac 应用程序有关,但我认为它是相关的,所以我确实添加了链接到该线程的附录以及显示 keyWindow 方法的演示。您认为还有什么其他内容吗?
    • 我将尝试您的方法 Logan 并回信。代码给您带来问题的场景有哪些?
    • 如何设置关键窗口属性?
    • 如果您使用故事板,我很确定它是自动设置的。否则在你的窗口调用'makeKeyAndVisible'
    【解决方案2】:

    您可以通过Notification Center 将主视图控制器对象设置为AuthorizationDenied 通知的观察者。并在被拒绝时发布该通知,您的视图控制器将收到通知。

    在您的View Controller 加载中:

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

    在你的单例类中:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"AuthorizationDenied" object:nil];
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 2021-08-17
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多