1. ホーム
  2. error-handling

[解決済み] iOS9 storyboard 未処理のアクション(handleNonLaunchSpecificActions)とは?

2023-07-01 12:01:28

質問

iOS9でストーリーボードを使ってアプリを実行すると、コンソールに次のようなエラーが表示されることに気づきました。私はxCode7を使用しています。 これは私が心配する必要があるものでしょうか。

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

どのように解決するのですか?

あなたのコードには何も問題はありません。これは Apple の内部で発生するログ メッセージであり、それについてレーダーに記録する必要があります。

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

  1. メソッド名をリードするアンダースコア _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion は、そのメソッドが宣言されたクラスのプライベートなものであること、あるいは内部的なものであることを示す慣習です。(参照 このコメント .)

  2. の 2 文字の接頭辞は、このように推測するのが妥当でしょう。 FBSSceneSnapshotAction は FrontBoard の略語であり、「"」の Rene Ritchie によれば、FrontBoard は iOS 9 のほしいものリスト。ゲスト モード" は、アプリの起動に関連するソフトウェア全体のファミリの一部です。

iOS 8 で、Apple はシステム マネージャーである SpringBoard を、より小さく、より焦点を絞ったいくつかのコンポーネントにリファクタリングしました。バックグラウンドのタスクを処理するためにすでに分離されていた BackBoard に加えて、フォアグラウンドのタスクのための Frontboard が追加されました。また、暗号化された安全な環境下でロック画面を処理するためのPreBoardも追加されました。[...]

の意味が全くわかりません。 BS の接頭辞は BSSettings は for ですが

BS の略記です。 BackBoard Settings であり、このログ メッセージを分析すると、あなたが行ったことではないことがわかります。

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

EDITです。

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

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

私は、処理されていない FBSceneSnapshotAction を見つけようとしましたが、うまくいきませんでした。それから、私はUIApplicationをサブクラス化し、オーバーロードした _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion . 今、私はアクションを直接取得することができましたが、それでも、それが何であるかはわかりません。

そこで、もう一度 FBSceneSnapshotAction を見てみました。というスーパークラスを持っていることがわかりました。 BSAction .

そして、次のように書きました。 ツール と同じように ランタイムブラウザ のようなもので、BSActionのサブクラスをすべて調べました。その結果、かなりの数のリストがあることがわかりました。

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

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

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