ストーリーボードを使用しているときにiOS 9でアプリを実行すると、コンソールに次のエラーが表示されることに気付きました。私はxCode7を使用しています。これは私が心配する必要があるものですか?
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
handler = remote;
info = <BSSettings: 0x176a5d90> {
(1) = 5;
};
}
コードに問題はありません。これはApple内部のログメッセージであり、レーダーについて報告する必要があります。
これがおそらくAppleのコードであることを示す2つのヒントがあります。
メソッド名の先頭にあるアンダースコア_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
は、メソッドが宣言されているクラスのプライベート/内部であることを示す規則です( this comment を参照)。
FBSSceneSnapshotAction
の2文字の接頭辞はFrontBoardの省略形であると推測するのは合理的です。これは、「 iOS 9ウィッシュリスト:ゲストモード」 のRene Ritchieによれば、家族全員の一部ですアプリの起動に関連するソフトウェアの一覧:
IOS 8では、Appleシステムマネージャー、SpringBoardをいくつかのより小さく、より焦点の合ったコンポーネントにリファクタリングしました。バックグラウンドタスクを処理するために既にスピンオフされたBackBoardに加え、 。彼らはまた、PreBoardを追加して、安全で暗号化された状態でロック画面を処理しました[...]
BS
のBSSettings
プレフィックスが何のためかわからないが、
BS
はBackBoard Settings
の省略形であり、このログメッセージの分析は、それがあなたがしたことではないことを示しています。
スタックトレースを取得したい場合は、 ここにリンクされているカテゴリ を実装できます。プライベートAPIをオーバーライドすることは悪い考えであると主張する人もいますが、この場合、スタックトレースを取得するための一時的な注入はあまり有害ではありません。
編集:
しかし、私たちはまだこのアクションが何であるかを知りたいです。そこで、-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
にブレークポイントを設定し、レジスタ値の出力を開始し、アプリケーションに関する情報がたくさんあるFBSceneImpl
というクラスを見つけました。
次に呼び出されるプライベートメソッドを見つけることができます( プログラムカウンター、 命令ポインタ、レジスタ15.)
ログで参照されている未処理のFBSceneSnapshotAction
を見つけようとしましたが、サイコロは見つかりませんでした。次に、UIApplicationをサブクラス化し、_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
をオーバーライドしました。今、私は直接アクションに到達することができましたが、それでも、それが何であるかはわかりません。
次に、FBSceneSnapshotActionをもう一度見ました。 BSAction
というスーパークラスがあります。
それから ツールRuntimeBrowser に似たものを書き、BSActionのすべてのサブクラスを調べました。それらのかなりのリストがあることがわかります:
持っている2つのメソッド名(1つはログから、もう1つはデバイスのプログラムカウンターから)は、これらのアクションがシステム内でアクションを渡すために内部で使用されることを示しています。
一部のアクションはおそらくアプリデリゲートのコールバックまで送信され、他のアクションは内部的に処理されます。
ここで起こっているのは、正しく処理されなかったアクションがあり、システムがそれを記録しているということです。どうやらそれを見るはずがなかったようです。
私の知る限り、上記の情報は、画面のスナップショット中のiOSに関連しています(ダブルクリックホームマルチタスク関連の動作を想定しています)。今のところ、無視しても問題ありません。
次の Gist simple category を使用して、上記の関数の呼び出しに対して自分自身をテストできます。
私のアプリでなぜそれが起こるのか分かりませんが、少なくともあなたがこれをログペインにポップアップさせないようにしたければ、あなたは例外をキャッチすることができます。これは解決策ではありませんが、catchに渡された引数のいずれかを調べることで、なぜハッピングされているのかをより深く理解できる可能性があります。
Swift 2バージョン:
import UIKit
extension UIApplication {
func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
//whatever you want to do in this catch
print("handleNonLaunchSpecificActions catched")
}
}
私はそれを理解しました。hまたは.mファイルでIBActionメソッドを宣言しているが、コントロールにバインドしていない場合に発生します。
.mの例:
- (IBAction)click:(id)sender{
}
ただし、このメソッドをストーリーボードのコントロールに割り当てていません。