2016-04-05 6 views
0

過去数ヶ月にわたって、私たちが開発中のアプリケーションで間欠的に次の問題に直面しています。提示されたUIViewControllerを却下すると散発的にクラッシュするアプリケーション

アプリ:これはSwiftで開発されたタブバーベースのナビゲーションを備えたかなり複雑なiOSアプリです。それはプッシュとプレゼンテーションの数が多いです。

問題点:私たちは、表示コントローラが破棄されたときに散発的にアプリがクラッシュすることがあります。これらのクラッシュは再現性がなく、これが確実に起こるシナリオを見つけることはできません。アプリケーションがクラッシュして、コード内の行を示すことはありません。これは、iOS 8とiOS 9の両方のデバイスのさまざまなバージョンで確認されています。クラッシュに関係するログは決して得られません。画像に見られるように

Crash State Screen Shot

Crash State Screen Shot 2

、と上に行くために多くはありません。しかし、数か月にわたるクラッシュの絶え間ない観察で、Xcodeウィンドウの左のバーにあるスレッド1に何か気づいた。クラッシュにつながるスタックは常にで終了します[UINavigationController viewWillAppear:]

また、スタックに見られるように示すラインである「_CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVERが...」私たちはNSNotificationセレクタが割り当て解除に呼び出されていることを疑う作られていますクラス。このために、すべてのクラスのすべてのNSNotificationオブザーバを割り当て解除前に削除し、すべてのクラスの除外メソッドにログを持ち、必要なときにそれらが割り当て解除されていることを確認しました。これはまだ問題を解決しませんでした。

誰かがこの問題についてお手伝いできますか?

+1

楽器でゾンビツールを使用しようとしましたか?私はアプリがリリースされたオブジェクトを呼び出していたこれまでの同様の問題を見ており、これにより特定のアイテムを特定することができました。 – CodeBender

+0

提示されたView Controllerをどのように解除しますか?彼らは自分自身を却下しているのですか、代議員のパターンを使用していますか?提示されたView Controllerのデリゲートを使用して、「要求」できるようにする必要があります。デリゲートを使用している場合、デリゲートのプロパティはw​​eakと宣言されていますか? – rplankenhorn

+0

@YourAdHere:はい、ゾンビツールを使用してアプリをプロファイリングしました。私はrespondsToSelector:DisconnectされたVCに直接関連付けられていないViewController [割り当てが解除された]にコールが行われたことを発見しました。私は割り当てを解除する前にすべてのクラスのすべての通知オブザーバを削除したことを確認しました。リリースされたオブジェクトを呼び出すために他にどのような理由がありますか?あなたは私にそれについていくつか光を投げてもらえますか? –

答えて

0

デリゲートパターンを使用していますか?もしそうであれば、デリゲートプロパティは常にweakとして宣言されるべきです。私はあなたがデリゲートプロパティへの強い参照をどこかに持っていて、通知を使用するコントローラが割り当て解除されていないと推測しています。

+0

いいえ、デリゲートパターンは、すべてのコントローラを終了するために使用されません。提示されたビューコントローラが提示されたコントローラからのトリガによって解消される必要がある状況においてのみ、これを使用した。 そして、はい、デリゲートはアプリ全体を通して常に弱いです。 –

関連する問題