プッシュ セグエは、親ビュー コントローラーの新しいバージョンを作成しません。viewDidLoad または viewDidAppear / viewWillAppear でセッション処理を開始していますか? viewWillDisappear で処理を停止していませんか? viewWillDisappear では、次のコード スニペットを使用して、ナビゲーション コントローラーのスタックをチェックして、親ビューがカバーされているか、スタックからポップされているかを確認できます。
- (void)viewWillDisappear:(BOOL)animated {
if ([[[self navigationController] viewControllers] indexOfObject:self] == NSNotFound) {
// we are disappearing. Clean up the session.
...
}
[super viewWillDisappear:animated];
}
UIViewController のencodeRestorableStateWithCoder:メソッドを使用して、View Controller に (限られた量の) 状態を保存できます。ドキュメントを確認してください。私自身は使用していませんが、役に立ちます。
ちなみに、デリゲート プロトコルを作成するよりも、UIViewController のdone :、reset :、およびcanPerformUnwindSegueAction:fromViewController:withSender:を使用する方が簡単な場合があります。アンワインド セグエは iOS 6 で導入され、デリゲートよりも少ないコードで済みます。