過去数ヶ月にわたって、私たちが開発中のアプリケーションで間欠的に次の問題に直面しています。提示されたUIViewControllerを却下すると散発的にクラッシュするアプリケーション
アプリ:これはSwiftで開発されたタブバーベースのナビゲーションを備えたかなり複雑なiOSアプリです。それはプッシュとプレゼンテーションの数が多いです。
問題点:私たちは、表示コントローラが破棄されたときに散発的にアプリがクラッシュすることがあります。これらのクラッシュは再現性がなく、これが確実に起こるシナリオを見つけることはできません。アプリケーションがクラッシュして、コード内の行を示すことはありません。これは、iOS 8とiOS 9の両方のデバイスのさまざまなバージョンで確認されています。クラッシュに関係するログは決して得られません。画像に見られるように
、と上に行くために多くはありません。しかし、数か月にわたるクラッシュの絶え間ない観察で、Xcodeウィンドウの左のバーにあるスレッド1に何か気づいた。クラッシュにつながるスタックは常にで終了します[UINavigationController viewWillAppear:]
また、スタックに見られるように示すラインである「_CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVERが...」私たちはNSNotificationセレクタが割り当て解除に呼び出されていることを疑う作られていますクラス。このために、すべてのクラスのすべてのNSNotificationオブザーバを割り当て解除前に削除し、すべてのクラスの除外メソッドにログを持ち、必要なときにそれらが割り当て解除されていることを確認しました。これはまだ問題を解決しませんでした。
誰かがこの問題についてお手伝いできますか?
楽器でゾンビツールを使用しようとしましたか?私はアプリがリリースされたオブジェクトを呼び出していたこれまでの同様の問題を見ており、これにより特定のアイテムを特定することができました。 – CodeBender
提示されたView Controllerをどのように解除しますか?彼らは自分自身を却下しているのですか、代議員のパターンを使用していますか?提示されたView Controllerのデリゲートを使用して、「要求」できるようにする必要があります。デリゲートを使用している場合、デリゲートのプロパティはweakと宣言されていますか? – rplankenhorn
@YourAdHere:はい、ゾンビツールを使用してアプリをプロファイリングしました。私はrespondsToSelector:DisconnectされたVCに直接関連付けられていないViewController [割り当てが解除された]にコールが行われたことを発見しました。私は割り当てを解除する前にすべてのクラスのすべての通知オブザーバを削除したことを確認しました。リリースされたオブジェクトを呼び出すために他にどのような理由がありますか?あなたは私にそれについていくつか光を投げてもらえますか? –