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

tol*_*ard 7 uiviewcontroller nsnotificationcenter uilocalnotification appdelegate swift

我有一个小部件,通过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
}
Run Code Online (Sandbox Code Playgroud)

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

有人能让我走上正轨吗?

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

Wai*_*ain 2

最简单的选择是显示视图控制器,该控制器将其作为选项卡控制器上的模式进行处理。这通常是最不复杂且最干净的,因为当用户完成时可以轻松返回到他们在交互之前所做的事情。

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

您需要指定某个类来负责确保显示正确的视图控制器,并告知在看到通知时执行请求。这可能是直接的应用程序委托、选项卡栏控制器或您创建并提供对选项卡控制器的引用的其他特定类。

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

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