2012-12-06 13 views
6

私はiOS開発が比較的新しいので、遭遇したエラーの根本原因を見つけていただきありがとうございます。アドレス:0x75d52a0で解放されたオブジェクト(ゾンビ)にObjective-Cメッセージが送信されました

Instruments(すなわちAllocations-Zombie Profiler)を使用してエラーをデバッグしようとしましたが、提示されたコールスタックを理解できませんでした。

これは、ユーザーインターフェイスがリンクされている方法です。 TabBarController - > NavigationController - > TopPlacesTableViewController - > RecentPhotosTableViewController - > PhotoViewController

のこと、つまり、私は(最後のビューに戻る]ボタンをクリックしたときにエラーが発生しましたPhotoViewController)。このアクションは、以前のRecentPhotosTableViewControllerを表示することになっていますが、未知の割り当て解除されたオブジェクトが、viewWillAppearとViewDidAppearのイベントの間にアクセスされました。

また、私はTopPlacesTableViewControllerとRecentPhotosTableViewControllerの親であるGenericTableViewControllerを持っています。子は、子ビューにロードされるデータである親にNSMutableArrayプロパティを設定します。

私は現在iOS6とXCode4.5を使用しています。

[更新:コンソールでは、この行が表示されました - "[UIView _forgetDependentConstraint:]:メッセージは割り当て解除されたインスタンスxxxに送信されました"]。

+0

ARCでコンパイルしていますか、していませんか? –

+0

はい私はあります。私はちょうどAnoop Vaidyaに、ARCのスイッチが入っていることを確認したところに答えました。 – user1881383

答えて

0

あなたはARCを使用していないと感じています。以前のオブジェクトを渡すことはできません。その間に、前のオブジェクトが解放され、次にそのオブジェクトにアクセスします。

ARCを使用するか、retainまたはautoreleaseを使用するようにコードをリファクタリングすることもできます。製品へ

+0

迅速な答えをありがとう!私は "あなたのターゲット - >ビルド設定 - > Apple LLVMコンパイラ - 言語 - > Objective-C自動参照カウント"の設定をチェックし、ARCがオンになっていることを確認しました。とにかく、割り当て解除後にどのオブジェクトが解放され、アクセスされたのかを正確に特定できますか? – user1881383

+0

それは見つけるのが非常に難しいです、あなたはブレークポイントをして、それぞれの行を歩かなければなりません...大きな仕事です。またはあなたができることの1つは、あなたがARCを使用していると確信しているので、あなた自身は[...リリース]できません。だからあなたができることは、すべてのオブジェクトを強くしてチェックすることです。 –

+0

奇妙なことが起こった。 PhotoViewControllerを削除し、新しいものをストーリーボードにドラッグした後、エラーは再び発生しませんでした。 – user1881383

-1

移動]> [編集スキーム>診断は、ゾンビが

ブレークポイントを作成し、割り当て解除されたオブジェクトを知るために一歩一歩を行く、それはおそらくあなたのオブジェクトへのポインタが、その後削除されたオブジェクトを有効にチェックをタップしますOSによってオブジェクトが割り当て解除されました。

+2

ゾンビオブジェクトを有効にしましたが、呼び出しスタックは役に立ちません。 Objective Cのコードの唯一の理解できる行は、AppDelegateのメインメソッド(つまり、@autoreleasepool {return UIApplicationMain(argc、argv、nil、NSStringFromClass([PhotosAppDelegate class]))}からトリガーされます。 – user1881383

関連する問題