問題タブ [state-restoration]

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 投票する
3 に答える
8126 参照

ios - UINavigationController 状態の復元 (ストーリーボードなし)

私は状態の復元をいじっています。以下のコードでは、UITableViewController のスクロール位置が復元されますが、詳細ビューをタップすると (MyViewController のインスタンスをナビゲーション スタックにプッシュします)、アプリを再起動すると、常に最初のビューに戻ります。ナビゲーション スタックのコントローラー (つまり、MyTableViewController)。誰かが正しいView Controller(つまりMyOtherViewController)に復元するのを手伝ってくれますか?

AppDelegate.m

MyTableViewController.m

MyOtherViewController.m

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

ios6 - iOS 6 UIWebViewの状態復元はどのように機能しますか?

ドキュメントによると:

iOS 6以降では、このビューのrestorementIdentifierプロパティに値を割り当てると、URL履歴、各ページのスケーリングとスクロールの位置、および現在表示されているページに関する情報が保持されます。復元中に、ビューはこれらの値を復元して、Webコンテンツが以前と同じように表示されるようにします。

私はそれをすべてやっていますが、何も起きていません。また、ユーザーが以前に表示していたURLを手動で保存して復元しても、スクロール位置は復元されません。ドキュメントは間違っていますか?

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

ios - すべての VC で UIKit の復元が viewControllerWithRestoreIdentifierPath を呼び出さない

私のアプリの概要

- ナビゲーション コントローラーを使用している間は、対応する XIB MainWindow.xib にあります。アプリ デリゲートでルート VC として設定されます。

-CategoriesVC はテーブル VC であり、ルート VC のトップ VC です。

-BooksCategoryVC (カテゴリ内のすべての本) は、CategoriesVC から何かを選択した後にプッシュされる別のテーブル vc です。

-BookScrollVC.m は、本を選択した後にテキストを表示するスクロール VC です。

コードの説明

1) アプリのデリゲートで、 shouldSaveApplicationState と shouldRestoreApplicationState を設定して YES を返すようにしました

2) CategoriesVC は MainWindow XIB にあり、IB と .m に復元識別子を設定しました。restoreClass を self に設定し、viewControllerWithRestoreIdentifierPath を実装しました。

3) BooksCategory には独自の XIB があり、復元プロトコルを実装しています。

4) VC がコードでインスタンス化されることを除いて、3) と同じ。ここには XIB はありません。

フロー

アプリケーションを起動します。最後の VC (BookScrollVC) までナビゲートします。

シミュレーターでホームボタンを押すと:

encodeRestorableStateWithCoder CategoriesVC で呼び出され、他の VC には進みません。復元プロトコルを実装しているすべての VC を経由するべきではないですか?

Xcode からアプリを再起動すると、実際viewControllerWithRestorationIdentifierPathには CategoriesVC 内の のみが呼び出されます。

不明な点やコードを確認したい場合はお知らせください

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

ios - 状態の復元中に UIViewControllers を作成および復元する正しい方法は?

ストーリー ボードを使用しないアプリで状態の復元を行いたいです。状態の復元中にプライマリ アプリの ViewController が 2 回インスタンス化されています。

application:willFinishLaunchingWithOptions私がフローを理解する方法は、アプリケーションの UIWindow とその rootViewController をセットアップするメソッドをpplication:didFinishLaunchingWithOptions使用することです。commonInit私の場合、rootViewController は、UINavigation の rootViewController として機能する「MyMainViewController」という名前のクラスを持つ UINavigationController です。

willEncodeRestorableStateWithCoderこれに加えて、ともそれぞれ扱ってdidDecodeRestorableStateWithCoderいます。しかし、myMainViewController に到達するまでにdidDecodeRestorableStateWithCoder、MyMainViewController の 2 つの別個のインスタンスが作成されていることがわかります。

復元中にUIViewControllerが1つだけ作成されるようにする方法は何ですか?

復元中の呼び出しの順序:

  • application:willFinishLaunchingWithOptions を介して新しいインスタンス MyMainViewController (#1) を作成します。
  • MyMainViewController の viewControllerWithRestorationIdentifierPath:coder が呼び出され、MainViewController が復元されます (#2)
  • application:didDecodeRestorableStateWithCoder: が呼び出され、 UINavigationController がデコードされて self.window に割り当てられます

AppDelegate で行っていることは次のとおりです。

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

iphone - カスタム コンテナー ビュー コントローラー (MMDrawerController) を使用した iOS 状態の復元

設定

スライド メニューのカスタム コンテナー ビュー コントローラー ( MMDrawerController ) を使用して、中央のビュー コントローラーとスライド アウトの左メニュー/ドロワーを制御しています。Facebook アプリや他の何百ものアプリと同じように。

左側の引き出しを開いてメニュー項目をタップすると、中央のビュー コントローラーが置き換えられます。

機能しているもの

アプリを開いて最初の中央ビュー コントローラーのボタンを押すと (背景色が変更されます)、アプリを強制終了して背景色を正常に復元できます。完全。

機能していないもの

ロードする別のセンター VC を選択して (メニュー/ドロワーを開いてメニュー オプションを選択することにより)、アプリを強制終了すると、アプリはそのビュー コントローラーに復元されません。

私がやっていること

私の親View Controllerでは、左と中央のView Controllerをエンコードしているので、復元時にそれらを再作成できます。

最初の中央のView Controllerの色を変更するフローでは、デコード中に中央と左のView Controllerを正常に戻すことができます。ただし、ロードする新しいセンター VC を選択するフローでは、これらのオブジェクトのデコード中に nil になります。

カスタム コンテナ ビュー コントローラをセットアップして、その子への参照を適切にエンコードし、デコード中にそれらを確実に取得できるようにするにはどうすればよいですか?

更新 1

適切に復元されないシナリオを実行した後、restoreArchiveTool を使用してアーカイブを調べました。実際、アーカイブには、予想されるエンコードされたオブジェクトの階層が含まれています。以前にエンコードされたView Controllerがデコード中にnullになる理由はまだわかりません。

更新 2この要点 のコメント セクションを見ると、保存と復元時にすべての適切なエンコード/デコード呼び出しが行われているように見えることがわかります。アプリのデリゲートで、最初にルート ビュー コントローラー (mmdrawercontroller のインスタンス) をセットアップしたときに、何らかの形で状態の復元を壊しているのだろうか? これが私がやっていることです:

0 投票する
6 に答える
2261 参照

ios - CoreData + iOS State Restore を最適に処理するには?

iOS 6 State Restoration を、完成間近のアプリに追加しようとしています。モデルの大部分が CoreData から取得されるアプリです。

推奨されるように、ビュー コントローラー間で管理オブジェクト コンテキストを移動するために「バトンを渡す」アプローチを使用しています。アプリ デリゲートで MOC を作成し、それを最初のビュー コントローラーに渡します。これは、それを prepareForSegue: などの 3 番目に渡します。

これは、State Restoration とうまく調和していないようです。私が考えられる唯一のことは、viewControllerWithRestorationIdentifierPath:coder: の実装で、App Delegate から MOC を直接取得することです。実際、Apple の開発者は、WWDC セッションを見ているときに、似たようなことをしたようです。

これが最良/唯一の方法ですか?状態の復元は、少なくとも復元されたView Controllerの場合、Pass-The-Batonを効果的に壊しますか?

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

ios - iOS State Restore で UIPopoverController を復元するには?

私のアプリの 1 つで、状態の復元を実装し、現在 iPad バージョンで作業しています。ビューコントローラーを表示するために使用しているiPadバージョンではUIPopoverController、それらのポップオーバーコントローラーを保存および復元する方法を見つけることができません。

UIPopoverControllerから継承されていないため、利用できるプロパティがありUIViewControllerません。restorationIdentifierrestorationClass

ポップオーバーコントローラーを保存し、それをメインビューコントローラーに手動でtargetRectエンコードして、メソッドcontentViewController中に復元できるようにする責任-decodeRestorableStateWithCoder:がありますか、それともドキュメントで見つけられなかった簡単な方法がありますか?

ファバン

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

iphone - Googleの結果が表示されない不可解な警告[シミュレーターで]

iOS プロジェクトで次の警告が表示されます: (iOS7、XCode 5 GM)

警告: 復元中のマーカー ファイルを作成できません

起動時にこの警告が表示されると、すべてが黒くなるビューコントローラーに取り組んでいます。アプリを削除して XCode を再起動すると、解決する場合があります。私は両方でNOを返しています

Update1: iPhone4sでテストしました。同じ結果です。View Controller に警告と黒い画面が表示されます。

Update2: 黒い画面に関する自分の質問に回答しました。警告は、最新の iOS 7.0.x バージョンで消えました。