web-dev-qa-db-ja.com

エラー:iOS9の_handleNonLaunchSpecificActions

IOS 9で次のエラーが表示されます。

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            {
                (1) = 5;
            };
        }

他の誰かがこのエラーに遭遇しましたか?なにが問題ですか?

157
Roddy

コードに問題はありません。これはApple内部のログメッセージであり、レーダーについて報告する必要があります。

これがおそらく Appleのコードであることを示す2つのヒントがあります。

  1. メソッド名の先頭にあるアンダースコア_handleNonLaunchSpecificActions:forScene:withTransitionContext:completionは、メソッドが宣言されたクラスのプライベート/内部であることを示す規則です。( this comment を参照)

  2. FBSSceneSnapshotActionの2文字のプレフィックスはFrontBoardの省略形であると推測するのは合理的です。これは、「 iOS 9 wish-list:Guest Mode」のRene Ritchieによる は、アプリの起動に関連するソフトウェアファミリ全体の一部です。

IOS 8では、Appleシステムマネージャー、SpringBoardをいくつかのより小さく、より焦点の合ったコンポーネントにリファクタリングしました。バックグラウンドタスクを処理するために既にスピンオフされたBackBoardに加え、 。彼らはまた、PreBoardを追加して、安全で暗号化された状態でロック画面を処理しました[...]

BSBSSettingsプレフィックスが何であるかはわかりませんが、このログメッセージの分析は、それがあなたがしたことではないことを示します。ロギングメッセージ。

スタックトレースを取得しようとする場合、 here にリンクされているカテゴリを実装できます。プライベートAPIをオーバーライドすることは悪い考えであると主張する人もいますが、この場合、スタックトレースを取得するための一時的な注入はあまり有害ではありません。

編集:

しかし、このアクションが何であるかをまだ知りたいです。そこで、-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]にブレークポイントを設定し、レジスタ値の出力を開始し、アプリケーションに関する情報がたくさんあるFBSceneImplというクラスを見つけました。

Scene

次に呼び出されるプライベートメソッドを見つけることができます(プログラムカウンターのレジスタ15に格納されています)。

Program Counter

ログで参照されている未処理のFBSceneSnapshotActionを見つけようとしましたが、サイコロは見つかりませんでした。次に、UIApplicationをサブクラス化し、_handleNonLaunchSpecificActions:forScene:withTransitionContext:completionをオーバーライドしました。今、私は直接アクションに到達することができましたが、それでも、私たちはそれが何であるかを知りません。

次に、FBSceneSnapshotActionをもう一度見ました。 BSActionというスーパークラスがあります。

それから a toolRuntimeBrowser と同様に書いて、BSActionのすべてのサブクラスを調べました。それらのかなりのリストがあることがわかります:

Action List

持っている2つのメソッド名(1つはログから、もう1つはデバイスのプログラムカウンターから)は、これらのアクションがシステム内でアクションを渡すために内部で使用されることを示しています。

一部のアクションはおそらくアプリデリゲートのコールバックまで送信され、他のアクションは内部的に処理されます。

ここで起こっているのは、正しく処理されなかったアクションがあり、システムがそれを記録しているということです。どうやらそれを見るはずがなかったようです。

9
Moshe