問題タブ [uikit-state-preservation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
770 参照

ios - カスタム コンテナ ビュー コントローラの状態保持

ラベルと 2 つの状態 A と B を持つカスタム コンテナー ビューコントローラーを作成する必要があります (各状態は子ビューコントローラーによって提示され、互いに交換されます)。親コンテナが作成され、 currentViewController がデフォルトで viewControllerA になると、両方の子ビューコントローラがインスタンス化されます。だから私はコンテナviewcontrollerでこのようなものを持っています:

コンテナー ビューコントローラーの状態を保持する必要があります。問題は、最初にコンテナーのビューコントローラーを作成するときと復元プロセスで、子のビューコントローラーをインスタンス化して追加する必要がある場所ですか? 子ビューコントローラーをどこに復元する必要がありますか?

多くの候補が見つかりました:

復元プロセス用。

この件に関するいくつかの考え。使用initWithCoderviewDidLoad、子ビューコントローラーを作成し、現在のビューコントローラーをコンテナービューコントローラーの子として追加する場合、復元プロセスの後、現在のビューコントローラーを変更し、必要に応じて交換する必要があります。何が間違っていると思いますか。viewWillAppear現在のViewControllerを追加するために使用する場合、復元プロセスでは正常ですが、このメソッドは複数回呼び出される可能性があります。

復元子ビューコントローラーを復元するには2つの方法があると思います:

  1. インスタンス化して同様viewDidLoadに復元します(ここで見ました - https://stackoverflow.com/a/16647606/2492707-(void)decodeRestorableStateWithCoder:(NSCoder *)coder[self.viewControllerA decodeRestorableStateWithCoder:coder]

  2. -(void)decodeRestorableStateWithCoder:(NSCoder *)coderのように完全に復元self.viewControllerA = [coder decodeObjectForKey: @"AKey"];

どちらの方法が良いですか?

UINavigationController (visibleViewController が設定されている場所) の回復プロセスを理解することも役に立ちます。

前もって感謝します。

0 投票する
1 に答える
271 参照

ios - iOS 状態の復元

私は iOS 開発にかなり慣れていないので、State Restoration API を理解しようとしています。アプリケーションに API を実装しないと、アプリケーションを終了して再開すると、ユーザーが終了する前の状態にアプリケーションの状態が復元されます。これが状態の回復ではない場合、これはどのようなメカニズムですか? また、状態復元との違いは何ですか? デフォルトのメカニズムが必要なことを実行しているように見えるのに、なぜ状態復元を実装する必要があるのでしょうか。

私は何かを理解していないだけだと確信していますが、それが何であるかはわかりません。

0 投票する
1 に答える
258 参照

ios - iOS 5 で状態の保存と復元を管理する方法

iOS App Programming Guideの「State Preservation and Restoration」セクションを見てきましたが、そこで説明されているプロセスは iOS 6 からのみ利用できるようです。アプリを iOS 5 から互換性を持たせる必要があるため、たとえば、これを処理する同等の方法が見つかりません。

特定のシナリオを提供するために、UINavigationControllerユーザー入力を要求する一連のビュー コントローラーをプッシュする場所があります。これはステップバイステップのフォームのようなもので、提供されたデータは最後のステップが完了するまで最終的に保存されません。ユーザーがデータを再度入力する必要がないように、アプリが終了したりバックグラウンドになったりした場合に備えて、ユーザーが入力を一時的に保存して、ユーザーがアプリに戻ったときに再び表示するようにしたいと思います。彼がすでに提供したこと。これは、iOS アプリでは一般的なシナリオかもしれません。

一時データをファイルに保存することを考えていましたが、これが iOS 5 で独自の/最良の方法であるかどうかはわかりません。この問題を扱っているヘルプまたは例/チュートリアル/ドキュメントはありますか?

ありがとう!

0 投票する
2 に答える
3260 参照

ios - 絵コンテを使わずにアプリの状態保存・復元?

このようにAppDelegate.mに追加uinavigationcontrollerしました

私のViewController.mは次のようになります

私のsecondViewController.mのような

出力中

encodeRestorableStateWithCoder を取得しますが、この後、ホーム ボタンを押してアプリケーションを再度実行すると、アプリケーションの状態が secondViewController に表示されず、decodeRestorableStateWithCoder が呼び出されません。

どこが間違っているのかわかりませんか?

0 投票する
3 に答える
2848 参照

objective-c - NSKeyedArchiver で NSValue をエンコードできないのはなぜですか?

MKMapViewセンターとスパンNSKeyedArchiverを状態保存のためにエンコードしようとしていました。いくつかの便利な新しい MapKit のNSValue追加valueWithMKCoordinate:を見つけましたvalueWithMKCoordinate:。これらをキー付きアーカイバにエンコードしようとして失敗しました:

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSKeyedArchiver encodeValueOfObjCType:at:]: このアーカイバは構造体をエンコードできません'

この問題の解決策は、個々の double を 4 つの個別のキーにエンコードすることであることを理解しています。

私の質問は、なぜこれが起こるのかです。AnNSValueはオブジェクトなので、「このアーカイバは構造体をエンコードできません」と表示されるのはなぜですか

0 投票する
1 に答える
1687 参照

ios - viewControllerWithRestorationIdentifierPath:coder: 既存のインスタンスを見つけるにはどうすればよいですか?

言う上のドキュメントviewControllerWithRestorationIdentifierPath:coder:

このメソッドの実装では、対応するビュー コントローラ オブジェクトを作成 (または検索) し、それを返す必要があります。このメソッドの実装では、必ずしも新しいビュー コントローラ オブジェクトを作成する必要はありません。別の方法で作成された既存のビュー コントローラー オブジェクトを返すこともできます。たとえば、View Controller がすでにストーリーボード ファイルから読み込まれている場合は、新しいオブジェクトを作成するのではなく、そのオブジェクトを返します。[イタリック体]

これは、私にはまったく意味のないことのように思えてきました。クラスメソッドです!現時点では、インスタンスを作成しない限り、どのインスタンスにもアクセスできません。クラスメソッドが「ストーリーボードファイルから既にロードされているView Controller」を見つけたり知ったりする方法を誰かが説明してくれたらありがたいです。

編集:viewControllerWithRestorationIdentifierPath:coder:賞金を獲得するには、 「別の方法で作成された既存のView Controllerオブジェクトを返す」ために使用されているクラスメソッドの実際のケースを、自分のアプリから表示する必要があります。

0 投票する
2 に答える
1964 参照

ios - iOSはUIWebViewの状態を保持しますか?

現在のアプリの起動時に UIWebView の状態 (現在の Web ページ、バック/フロント リストなど) を保持することは可能ですか? たとえば、Web ビューの割り当てを解除し、将来のある時点でそれを再作成したい場合、以前の状態にすることは可能ですか?