問題タブ [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.
ios - UINavigationController 状態の復元 (ストーリーボードなし)
私は状態の復元をいじっています。以下のコードでは、UITableViewController のスクロール位置が復元されますが、詳細ビューをタップすると (MyViewController のインスタンスをナビゲーション スタックにプッシュします)、アプリを再起動すると、常に最初のビューに戻ります。ナビゲーション スタックのコントローラー (つまり、MyTableViewController)。誰かが正しいView Controller(つまりMyOtherViewController)に復元するのを手伝ってくれますか?
AppDelegate.m
MyTableViewController.m
MyOtherViewController.m
ios6 - iOS 6 UIWebViewの状態復元はどのように機能しますか?
ドキュメントによると:
iOS 6以降では、このビューのrestorementIdentifierプロパティに値を割り当てると、URL履歴、各ページのスケーリングとスクロールの位置、および現在表示されているページに関する情報が保持されます。復元中に、ビューはこれらの値を復元して、Webコンテンツが以前と同じように表示されるようにします。
私はそれをすべてやっていますが、何も起きていません。また、ユーザーが以前に表示していたURLを手動で保存して復元しても、スクロール位置は復元されません。ドキュメントは間違っていますか?
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 内の のみが呼び出されます。
不明な点やコードを確認したい場合はお知らせください
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 で行っていることは次のとおりです。
iphone - カスタム コンテナー ビュー コントローラー (MMDrawerController) を使用した iOS 状態の復元
設定
スライド メニューのカスタム コンテナー ビュー コントローラー ( MMDrawerController ) を使用して、中央のビュー コントローラーとスライド アウトの左メニュー/ドロワーを制御しています。Facebook アプリや他の何百ものアプリと同じように。
左側の引き出しを開いてメニュー項目をタップすると、中央のビュー コントローラーが置き換えられます。
機能しているもの
アプリを開いて最初の中央ビュー コントローラーのボタンを押すと (背景色が変更されます)、アプリを強制終了して背景色を正常に復元できます。完全。
機能していないもの
ロードする別のセンター VC を選択して (メニュー/ドロワーを開いてメニュー オプションを選択することにより)、アプリを強制終了すると、アプリはそのビュー コントローラーに復元されません。
私がやっていること
私の親View Controllerでは、左と中央のView Controllerをエンコードしているので、復元時にそれらを再作成できます。
最初の中央のView Controllerの色を変更するフローでは、デコード中に中央と左のView Controllerを正常に戻すことができます。ただし、ロードする新しいセンター VC を選択するフローでは、これらのオブジェクトのデコード中に nil になります。
カスタム コンテナ ビュー コントローラをセットアップして、その子への参照を適切にエンコードし、デコード中にそれらを確実に取得できるようにするにはどうすればよいですか?
更新 1
適切に復元されないシナリオを実行した後、restoreArchiveTool を使用してアーカイブを調べました。実際、アーカイブには、予想されるエンコードされたオブジェクトの階層が含まれています。以前にエンコードされたView Controllerがデコード中にnullになる理由はまだわかりません。
更新 2この要点 のコメント セクションを見ると、保存と復元時にすべての適切なエンコード/デコード呼び出しが行われているように見えることがわかります。アプリのデリゲートで、最初にルート ビュー コントローラー (mmdrawercontroller のインスタンス) をセットアップしたときに、何らかの形で状態の復元を壊しているのだろうか? これが私がやっていることです:
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を効果的に壊しますか?
ios - iOS State Restore で UIPopoverController を復元するには?
私のアプリの 1 つで、状態の復元を実装し、現在 iPad バージョンで作業しています。ビューコントローラーを表示するために使用しているiPadバージョンではUIPopoverController
、それらのポップオーバーコントローラーを保存および復元する方法を見つけることができません。
UIPopoverController
から継承されていないため、利用できるプロパティがありUIViewController
ません。restorationIdentifier
restorationClass
ポップオーバーコントローラーを保存し、それをメインビューコントローラーに手動でtargetRect
エンコードして、メソッドcontentViewController
中に復元できるようにする責任-decodeRestorableStateWithCoder:
がありますか、それともドキュメントで見つけられなかった簡単な方法がありますか?
ファバン
iphone - Googleの結果が表示されない不可解な警告[シミュレーターで]
iOS プロジェクトで次の警告が表示されます: (iOS7、XCode 5 GM)
警告: 復元中のマーカー ファイルを作成できません
起動時にこの警告が表示されると、すべてが黒くなるビューコントローラーに取り組んでいます。アプリを削除して XCode を再起動すると、解決する場合があります。私は両方でNOを返しています
Update1: iPhone4sでテストしました。同じ結果です。View Controller に警告と黒い画面が表示されます。
Update2: 黒い画面に関する自分の質問に回答しました。警告は、最新の iOS 7.0.x バージョンで消えました。