0

メモリ管理に大きな問題があります。プログラムを少し使用すると、メモリ不足でクラッシュします。インスタンスにアクセスするのではなく、新しいViewControllerを作成するたびに、新しいインスタンスを作成しています。

したがって、アプリは FirstViewController をロードしてインスタンス化します。をインスタンス化するボタンをクリックしますFilterViewController。ここから戻って、次のようにこれの新しいインスタンスをFirstViewController作成しています。

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName
        :@"MainStoryboard" bundle:nil];

    FirstViewController *fvc = [storyboard 
        instantiateViewControllerWithIdentifier:@"FirstViewController"];

    fvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

そして、プロセスを繰り返します。ビューコントローラーを再インスタンス化せずに表示する方法はありますか? アプリの提出が近づいているので(できれば明日)、これを整理する必要があります。ありがとう!

これがViewControllerのプレゼンテーションです。

[self presentViewController:fvc animated:YES completion:nil];

発表FilterViewControllerFirstViewController

- (IBAction)searchOptions:(id)sender {
    FilterViewController *ctrl = [[FilterViewController alloc] init];
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

    self.filterViewController = ctrl;

    [self.navigationController pushViewController:self.filterViewController animated:NO];

}
4

1 に答える 1

1

を使用している場合はpresentViewController、 を呼び出して前のビューに戻ります[self dismissViewControllerAnimated:YES];。これは、現在新しいコントローラーを作成しているメソッドで行います。

ナビゲーション コントローラーにプッシュしている場合は、ナビゲーション コントローラーからポップします: [self.navigationController popViewControllerAnimated:YES];.


最後の更新に基づいて、ナビゲーションコントローラーがないようで、ビューをサブビューとして追加し、フィルタービューコントローラーを保存しているだけです。それは人生をより複雑にし、それを削除する正しい方法はデリゲート関係をセットアップすることです。これにより、フィルター ビュー コントローラーは完了時に最初のビュー コントローラーにコールバックし、最初のコントローラーはビューを移行し、参照は nil になります。

可能であれば、ナビゲーションコントローラーを適切に使用するように変更してください。コードの半分は既にありますが、最初のビュー コントローラーはナビゲーション コントローラーに含まれていないようです。ナビコントローラーを使えば生活が楽になる…

于 2013-07-21T22:12:35.700 に答える