0

私はアプリを持っています(そして今はアーキテクチャを変更できません)。

ページ1は、presentModalViewControllerを使用してページ2(Tabnav)を表示します。次に、ページ2は、presentModalViewControllerを使用してページ1を(ボタンを介して)表示できます。

問題は、ページ1を再表示すると、ページ1がすでに表示されているなどの理由で、アプリがクラッシュすることです。ページ1を表示しているページ2を閉じることはできますが、モーダルで表示できる他のページがあり、Page1ではなくスタックの下位レベルになるため、そのオプションを選択することはできません。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <AccountViewController: 0xc3824a0>.'
*** First throw call stack:
(0x1f3d012 0x1a32e7e 0xa63721 0xa64777 0xa647b7 0x908e 0x1a46705 0x97d920 0xbb9b24 0x1a46705 0x97d920 0x97d8b8 0xa3e671 0xa3ebcf 0xa3dd38 0x9ad33f 0x9ad552 0x98b3aa 0x97ccf8 0x2e48df9 0x2e48ad0 0x1eb2bf5 0x1eb2962 0x1ee3bb6 0x1ee2f44 0x1ee2e1b 0x2e477e3 0x2e47668 0x97a65c 0x258d 0x24b5 0x1)
libc++abi.dylib: terminate called throwing an exception
4

3 に答える 3

1

ページ1を再度表示する場合は、現在のView Controller(つまり、ページ2)を閉じるか、ページ1の新しいインスタンスを作成してモーダルに表示する必要があります。

すでにモーダルで表示されるViewControllerを使用している場合でも、何かを表示し始めるのはお勧めできません。

モーダルVCを提示してから、それを却下する必要があります。それはそれであるはずです。

OPを読み直します。真剣に、構造を捨てて再設計してください。あなたが持っているものは混乱しているようです。トランジションがたくさんある場合は、ナビゲーションコントローラーを使用しないのはなぜですか?

于 2013-01-09T23:36:47.360 に答える
1

すでにモーダルスタックにあるように、Page1からプレゼンテーションを行うことはできません。「すでに提示されている」とは、Xcodeの略記です。Page2Page1Page1

モーダルスタックを引き続き使用する必要があるため、モーダルスタックを慎重に明確に表現することで、いつでも必要なViewControllerORを提示し、 ViewControllers「ジャンプ」するためにいくつかのページを閉じることで、任意のページにアクセスできるようになります。スタック上の特定のページに移動します。

この質問に対するwL_の回答は、一度に複数のモーダルを却下する方法の説明を始めるのに適した場所ですViewController(iOS 6ではセレクター名がわずかに変更されていることに注意してください)。もちろん、モーダルがたくさんある場合はViewControllers、各ページがスタック内にある場所でかなりのメモリ追跡に費やすことになります。

これはかなり悪い設計であることを指摘する必要がありますが、アーキテクチャを変更することはできないとおっしゃっていたように、これは問題を回避する1つの方法です。

擬似コード:

Button pressed to jump to page:
    PageIsInStackAlready?
        Yes
           Calculate/retrieve page position in stack
           Dismiss necessary number of ViewControllers
        No
           Present new modal ViewController
           Store/account for new page's location on stack

私が言うように、これはうまくいくかもしれませんが、それは間違いなくシステムと戦っています。

于 2013-01-09T23:38:02.630 に答える
1

クラスとインスタンスの違いを理解していますか?AccountViewControllerを提示する場合は、別のAccountViewControllerインスタンスを作成して提示する必要があります。あなたがやろうとしていることは、すでにインターフェースにあるのとまったく同じAccountViewControllerインスタンスを提示しているように思えます。明らかにそれは不可能です。

私はあなたのインターフェースがただ悪いデザインであるという他の人たちに同意します、しかし少なくともこれはあなたが尋ねている言語的な質問に答えます。

于 2013-01-09T23:38:19.170 に答える