3

動作するコードは以前は

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

selfは と同じクラスなaNewViewControllerので、左右にめくって新しいページ (別のデータ) を表示し続けるページです。

しかし、presentViewControllerこの方法ではメモリ使用量がますます増える可能性があるため (Web ブラウザーが前後の履歴をどんどん持っているようなものです)、コードを次のように変更しました。

[self.presentingViewController dismissViewControllerAnimated:NO 
          completion:^{
              [self.presentingViewController 
                        presentViewController:aNewViewController
                        animated:YES completion:nil];
}];

しかし、何らかの理由で、新しいView Controllerのビューには移動せずに、以前のView Controllerのビューに「戻る」だけです(aNewViewController)。最初に、上記のコードを 2 行に分けて並列に配置し、次に 2 行目を最初の呼び出しの完了ブロックに配置しました。そして、これら 2 つの方法はどちらも期待どおりに機能しません。新しいView Controllerに移動しないようにするためのトリッキーなことはありますか?

また、以前は新しいコンテンツにめくる効果がありましたが、今のところ、うまくいけば最初のページ (開始ページ) に戻って、結果のページにめくって、次はおそらく次のページになります。 、再び最初のページにめくります。開始ページは結果ページとはかなり異なるように見えるため、結果ページを表示し続ける (ある結果ページから別の結果ページに切り替える) 方がよいでしょう。「dismiss」をアニメーションなしに設定すると、フリップ アニメーションは表示されませんが、最初に開始ページが表示され、次に結果ページが表示されます。これを解決する方法はありますか?

更新:self解任後に存在 しなくなるというのは本当ではないでしょうか? (オブジェクトは解放されます)。上記のコードは、実際にはクラス メソッドで実行されます (クラスはaNewViewController、結果ページのビュー コントローラーである のクラスと同じです)。問題を解決するために、self最初にローカル変数を設定しようとしました

UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO 
          completion:^{
              [presentingViewController 
                        presentViewController:aNewViewController
                        animated:YES completion:nil];
}];

(fooが渡され、値はself) です。それは実際に動作します!しかし、それがクラス メソッドではなくインスタンス メソッドである場合はどうなるでしょうか...selfもう存在しませんか? (インスタンス メソッド内にある場合、完了ブロックはオブジェクトを存続させますか? しかし、完了ブロックの後で、オブジェクトを存続させているのは誰ですか?) クラス メソッドでそれを行いました。このページを表示するためのクラス メソッド (URL データ フェッチ ロジックを使用)。

4

1 に答える 1

0

これら 2 つの遷移の間に遅延を追加する必要があります。0.40 のディールを追加してみてください。お気に入り[self performSelector:@selector(anySelector:) withObject:nil afterDelay:0.40];

于 2012-09-26T11:05:11.117 に答える