由于虚拟屏幕或错误的控制器处于活动状态,避免丢失小部件发送的通知

时间:2016-08-25 11:09:31

标签: swift uiviewcontroller uilocalnotification nsnotificationcenter appdelegate

我有一个小部件,通过NSURL和extensionContext调用相应的应用程序来激活应用程序中的特定操作。

在AppDelegate的application:openURL:options:方法中我有:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    if let path = url.path{
        if path.containsString("action"){
          NSNotificationCenter.defaultCenter().postNotificationName(MyViewController.purchasmyActionKey, object: nil)
        }
    }
    return true
}

当应用程序处于打开状态并且MyViewController处于活动状态时,操作会完美执行。但是,如果我在应用程序中的另一个视图控制器上或应用程序已关闭,则不会执行该操作。

有人可以让我走上正轨吗?

注意:我的主控制器是带有各种子视图控制器的UITabBarController。有些是UINavigationControllers(包含网格控制器),另一个是ListViewController

1 个答案:

答案 0 :(得分:2)

最简单的选项是显示视图控制器,它将其作为模式控制器上的模态处理。这通常是最不复杂和最干净的,因为用户可以在他们完成此交互之前轻松返回到他们正在做的事情。

如果由于某种原因你不能这样做:

您需要指定某个类负责确保显示正确的视图控制器并告知在看到通知时操作请求。这可以是直接的app委托,标签栏控制器或您创建的一些其他特定类,并提供对标签控制器的引用。

它的工作是检查选项卡控制器的状态并在需要时显示正确的视图控制器,然后告诉视图控制器开始某些操作。

拥有此逻辑的此类可以是观察您的通知的类,或者您可以直接传递消息,因为您的应用代理可能知道该实例或正在创建新实例。