1

解決したい特定の状況があります。

私はUIViewControllerロードするを持っています。特定の条件UIViewControllerで、ナビゲーション スタックでその上に新しいものを表示することを選択します。その後UIViewController、スタックに前のものを残したいのですが、ソートしたいreleaseので、先頭の VC が最初のものにポップしたときに、残した状態ではなく、ちょうど押した。

それでも、2 番目の VC の上にプッシュしたいだけかもしれませんが、それによってナビゲーション スタックが混乱し、この動作がループする可能性があるため、メモリ リークが発生する可能性があることは理解しています。

私は ARC を使用しており、iOS 6 以降用のアプリを構築しています。

4

2 に答える 2

1

次の 2 つの選択肢があると思います。

  1. viewWillAppear2 番目のビュー コントローラーがナビゲーション スタックからポップされると、最初のビュー コントローラーで呼び出されるため、そのメソッドで最初のビュー コントローラーのすべての状態と UI 要素をリセットできます。
  2. 2 番目のビュー コントローラーをポップする前に、 のsetViewControllers:animated:方法を使用して、ナビゲーション スタック内の最初のビュー コントローラー インスタンスを新しいインスタンスにUINavigationController置き換えることができます。

したがって、最初のView Controllerインスタンスを保持して「リセット」するか、2番目のView Controllerから戻ったときに最初のView Controllerの「新しい」インスタンスが必要かによって異なります。

于 2013-08-11T12:56:28.750 に答える
0

2 番目の VC から 1 番目の VC に通知を送信し、ビューをアンロードしてから手動でロードするように指示することをお勧めします。

2 番目の VC:

- (void)viewWillAppear{
   [[NSNotificationCenter defaultCenter]
   postNotificationName:@"unloadVC" object:nil];
}

1回目のVC

- (void)viewDidLoad{
  [[NSNotificationCenter defaultCenter]addObserver:self 
                                          selector:@selector(unloadVC:) 
                                              name:@"unloadVC" 
                                            object:nil];
}

- (IBAction)unloadVC:(id)sender{
self.view = nil;

[self viewDidLoad];
}

ただし、コードはテストされていません。

于 2013-08-11T12:55:47.627 に答える