私を悩ませている何かについて必死に助けを求めています...
これはすべてARCの下にあります。
プロファイル画面 (UserProfileVC) があり、その画面のボタンをクリックすると、SettingsVC が表示されます。SettingsVC は UserProfileVC の settingsVC ivar に保持されており、ボタンのクリックに応答するときに、settingsVC が nil かどうかを確認し、ストーリーボードから作成して提示します。
- (IBAction)handleSettingsButtonPressed:(id)sender {
if (!settingsVC) {
settingsVC = [self.storyboard instantiateViewControllerWithIdentifier:@"UPSettingsVC"];
settingsVC.model = self.model;
settingsVC.horizontalCoverPresentingVC = self;
}
[self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];
}
SettingsVC を閉じるときは、スーパービューからビューを削除するだけです (これは基本的に #horizontalCoverTransitionToViewController:duration: メソッドが行うこととは反対です)。nil に設定したことはありません。
UserProfileVC から SettingsVC に移動して戻ることができます... 正確に 1 回。SettingsVC に戻ろうとすると、
if (!settingsVC) {...}
ブロックし、入力しないでください(settingsVCがまだ存在していることを示しています)。
[self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];
EXC_BAD_ACCESS (code=1...) エラーが発生します。
Zombies をオンにすると、SettingsVC が Zombie になっていることがわかります。
そのクラスのコンパイラ フラグに -fno-objc-arc を追加し、#release を実装してブレークポイントを配置するところまで行っています。
リリースは、SettingsVC を閉じるコードから呼び出されますが、同じ正確なコードがアプリ内の他のほとんどすべての VC で使用されており、それらのいずれもリリースを発生させません。
どこを見るべきか、デバッグする方法、またはインストゥルメントを使用して問題を解決するためのヒントを誰かに教えてもらえますか??
根本的なフレームワークのバグが疑われ始めていますが、問題を実証するために小さなサンプル アプリを作成すると、問題なく動作するため、このクラスに特有のものがあるはずです。
ご意見ありがとうございます。