7

NSURLとextensionContextで対応するアプリを呼び出すウィジェットがあります。私はAppDelegateのapplication:openURL:options:方法でスパッシュスクリーンやコントローラが間違っているため、ウィジェットから送信された通知を失うことは避けてください。

:アプリが開いており、アクティブMyViewControllerを持っている場合

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 
} 

は、アクションが完全に実行されます。しかし、私がアプリ内の別のView Controller上にいる場合や、アプリが閉じている場合、アクションは実行されません。

誰かが正しい軌道に乗ってくれますか?

NB:私のメインコントローラは、さまざまな子ビューコントローラを持つUITabBarControllerです。いくつかはUINavigationControllers(グリッドコントローラを含む)と、もう1つはListViewControllerです。

答えて

2

最も簡単なオプションは、これを処理するビューコントローラをタブコントローラ上のモーダルとして表示することです。これは、一般的に、最も複雑ではなく、ユーザが完了すると、この相互作用の前に行っていたことに簡単に戻すことができるため、最もクリーンです。

あなたには、いくつかの理由のためにそれを行うことができない場合は、次の

あなたは、いくつかのクラスに正しいビューコントローラが示され、通知が見たときにアクションにリクエストを告げていることを保証する責任を指定する必要があります。これは、アプリケーションデリゲート、タブバーコントローラ、または作成してタブコントローラへの参照を提供する他の特定のクラスにすることができます。

これは、タブコントローラの状態を確認し、必要に応じて正しいビューコントローラを表示し、そのビューコントローラに何らかのアクションを開始するよう指示することです。

このロジックを所有するこのクラスは、通知を監視するクラスでも、アプリケーションの代理人がインスタンスを知っているか新しいインスタンスを作成している可能性があるため、メッセージを直接渡すこともできます。

関連する問題