動作するコードは以前は
[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 データ フェッチ ロジックを使用)。