問題タブ [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 に答える
17204 参照

swift - Swift:IDでUIオブジェクトを取得しますか?

iOS では、文字列 ID を UI オブジェクトに割り当てて、その ID でコード内で取得することはできますか?

Androidに似たものを探していますfindViewById(id)

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

ios - MMDrawer を使用した iOS での状態の保存と復元の問題

MMDrawerControllerライブラリを iOS アプリケーションに統合しました。アプリケーションがバックグラウンドで強制終了された場合でも (アプリケーションがフォアグラウンドからバックグラウンドに移行した場合のみ)、アプリケーションの状態を復元する必要があります。通常のナビゲーション アプリケーションでは問題なく動作していますが、アプリケーションで「 setCenterViewController 」オプションを使用してナビゲーションを変更すると、復元が期待どおりに機能せず、次のリンクに記載されているすべての指示に従いました "

setCenterViewControllerオプション (MMDrawer から推奨) を使用して特定の画面に移動し、バックグラウンドでアプリを削除しました。再度開くと、デフォルトの初期画面で起動しますが、バックグラウンドに入る前の画面で再度開く必要があると予想しています。

コードスニペットは次のとおりです。


この問題の解決を手伝ってください。

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

ios - viewDidLoad にない場合、どこで最初のネットワーク呼び出しを行う必要がありますか (たとえば、最初にフィードを入力するため)?

以前は、viewDidLoadすべてのビューが設定された直後に、最初のネットワーク呼び出しを行って、ユーザーのフィードを に入力していました。

ただし、iOS の状態復元メカニズムでは、状態復元が の viewDidLoadに実行されるため、これは機能しません。そのため、復元によってデータが既に取り込まれているため、呼び出しが行われないようにしたい場合は、できません。後に知られるviewDidLoad

では、最初のネットワーク呼び出しなどはどこで行うべきでしょうか? viewDidAppear呼び出されるナビゲーション コントローラー スタックから戻るたびに間違っているようです。最初の呼び出しが既に行われているというフラグを設定することもできますが、それは少しひどいようです。

典型的なアドバイスは、 viewDidAppear ではなく、 viewDidLoad で1 回限りのことを行うように思われるため、私は心配しています。

ここに提案された戦略はありますか?

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

ios - 状態の復元時にモーダル ビュー コントローラーがアニメーション化する

Split View Controller を使用したユニバーサル アプリの状態の復元に奇妙な問題があります。

ストーリーボードとセグエを使用し、すべての関連ビューコントローラーの復元識別子を使用して、非常に標準的な方法で物事を行っているという奇妙なこと。ロジックはストーリーボードにあり、最小限の XCode プロジェクトがこれを示しているため、実際にはコードはありません。

問題は、Split View Controller から提示されるフォーム シートとしてモーダルに表示される設定画面にあります。私のView Controller階層は最終的には正しくなりますが、遷移はあまり意味がありません. 何らかの理由で、状態の復元によってモーダル コントローラーが所定の位置にアニメーション化されます。

アプリが最後に実行されたときのスクリーンショットで画面が開始されるため、設定コントローラーが既に存在するため、アニメーションは視覚的なノイズにすぎません。

インタラクティブに設定に入るときに尊重されるセグエのアニメーションを無効にしようとしましたが、状態の復元が同じことを行うと、アニメーションが表示されます。

これを回避する標準的な方法は何ですか?

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

ios - ビューコントローラーを提示するときに状態の復元が機能しませんか?

ストーリーボードは使用していません。そして現在ViewController1にあります。ここでは、ボタン クリック イベントでこのコードを呼び出します。

そして、InnerViewControllerrestorationIdentifierrestorationClass与えられます。私はrestore.likeのために書かれた適切な方法を持っています

私が変更した場合

それは正常に動作します。現在の何が欠けているか、または間違っていますか。試しに、私もこれを試しました:

しかし、役に立たない。うまくいきません。

発表時の結果は -

viewControllerWithRestorationIdentifierPath

decodeRestorableStateWithCoder呼ばれています。コールも入っていますが、入ってviewdidloadいませんviewwillappear。と私は視覚的に見てViewcontroller1います。しかし、それはすべて問題ありませんpush

プレゼントには何か特別なものが必要です か??

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

ios - 中間のView Controllerが復元されるのはなぜですか?

アプリに状態復元を使用しています。私は vc1 -> vc2 -> vc3 を持っています。

vc3 では、復元デリゲートと復元識別子を実装しました。しかし、vc1 と v2 では、識別子のみを実装しました。

vc3 に到達すると、問題なく復元されます。しかし、vc2 に到達すると、それも復元されます。復元識別子のみが設定されています。中間ビューコントローラーも復元されますか? 私はそれをしたくありません。

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

swift - Xcode 8.1 UIDataSourceModelAssociation が壊れていますか?

Core Data プロジェクト (Swift) に状態復元を実装しようとしていますが、NSFetchedResultsController のラッパー クラスである分割ビュー コントローラーの UITableView のデータ ソースに UIDataSourceModelAssociation プロトコルを実装する際に問題が発生しています。コードは次のとおりです。

「static Foundation.IndexPath._unconditionallyBridgeFromObjectiveC (Swift.Optional<__ObjC.NSIndexPath>) -> Foundation の問題を指摘しているように見える状態の復元時に、AppDelegate クラスの上部でデバッガーを停止する EXC_BAD_INSTRUCTION 例外が発生しています。 .IndexPath".

私はrestoreArchiveToolを使用して、結果のdata.dataファイルをsavedStateフォルダーからコマンド「.../restorationArchiveTool --plist --structured -o path/to/outputfile」でplistに変換します

結果の plist ファイルをプレビューで表示すると、次のようになります。

kApplicationSelectedCellIndexPathsKey...( "<NSIndexPath: 0x7fe60054cb00> {長さ = 2、パス = 0 - 3}")

...しかし、Xcodeでplistを開くと、次のようになります:

キーは kApplicationSelectedCellIndexPathsKey ですが、値は ( だけです

デコーダーがデータ ファイルの変換に plist リーダーと同じアルゴリズムを使用すると仮定すると、何らかの例外が発生しても驚くことではありません。

UIDataSourceModelAssociation 拡張機能を削除すると、例外はなくなります。

他の誰かがこの問題を確認できますか、それとも本当に明らかなことを見逃していますか?

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

swift - NSViewController ユーザー インターフェイスの状態の復元

概要:

Cocoa の組み込みのユーザー インターフェイス保存メカニズムを使用してNSSearchField、の状態を保存/復元する適切な方法は何ですか?NSViewController

詳細:

初めての macOS アプリに取り組んでいますが、ユーザー インターフェイスの状態の復元に少し問題があります。これまでのところ、サブクラスでencodeRestorableState(with:)andrestoreState(with:)メソッドが呼び出されるところまで機能しています。NSViewController

ビューコントローラーにがNSSearchFieldあり、検索フィールドの状態 (テキスト、選択範囲、カーソル位置、現在フォーカスされているかどうかなど) を保存/復元したいと考えています。

次のコードを使用すると、テキストが適切に保存され、復元されます。

明らかに、検索フィールドの選択やカーソル位置などを保存/復元するためのコードを追加できます。

私の本当の質問は、検索フィールドの状態を保存および復元するための、より適切で適切な自動化された方法があるかどうかです。それとも、保存したい検索フィールドの属性ごとに独自のコードを書く必要がありますか?

私は使用してみました:

と:

上記の2つの方法では、アプリを再起動したときに検索フィールドに何も表示されませんでした。

私も実装しました:

ここで、View Controller のアウトレット プロパティ"searchField"の名前を指定します。NSTextFieldこのメソッドは、アプリが起動されたときに呼び出されますが、検索フィールドにテキストが復元されませんでした。

このビュー コントローラーは、ストーリーボードから作成されます。ビューコントローラーidentifierが設定されました。検索フィールドidentifierも設定されています。このView Controllerは、別のView Controllerの子View Controllerです。

「The Core App Design」ドキュメントのUser Interface Preservationセクションを読みましたが、View Controller のビューがどのように保存/復元されるか、および自動と手動のどちらがどの程度なのかが明確ではありません。

OSX 10.12 および 10.11 をサポートします。どの回答でもObjective-CまたはSwiftで問題ありません。

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

ios - iOSでストーリーボードを使用して状態を保存および復元する方法は?

私はチャットアプリケーションに取り組んでいます。すべてのView Controllerのアプリケーション状態を保存したい。

アプリの状態を保存する私のコード:

アプリケーションの状態をエンコードできますが、デコードできません。アプリデリゲートクラスで追加しました shouldRestoreApplicationState,willEncodeRestorableStateWithCoder

iOSでアプリケーションの状態を保存および復元するための適切な解決策を教えてください。