問題タブ [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 投票する
1 に答える
867 参照

ios - カスタム デリゲートまたはデータ ソースを使用したビュー コントローラーの状態保持

iOS 6 以降 (私のアプリは 7.0 以降) の状態保持を使用して、別のビュー コントローラーからモーダルに表示されるビューを保持しようとしています。そのため、典型的なモーダル ビュー コントローラーの却下パターンがあります。

TNTLoginViewController.h の内容

getStarted: 実装

TNTLoginViewControllerDismiss: モーダルを提示したデリゲートのメソッド

そして、それはすべて魅力のように機能します!状態保存まで。簡単に言えば、TNTLoginViewController がデリゲートを保持する方法がわかりません。それができない理由を理解しています。それは単なるポインタです! そこで、代わりにデリゲートを導出するさまざまな方法を試しました。

  1. 復元クラス: 残念ながら、クラス メソッドとしてviewControllerWithRestorationIdentifierPath:coder:、特定の提示ビュー コントローラーを指すのに役立ちません。
  2. TNTLogingViewControllerDelegate>ストーリーボードで、提示する VC をモーダル VC のデリゲートとして設定します。提示する VC のクラスがヘッダーでプロトコルを公に採用した場合でも、Xcode ではその接続を描画できません。それは別の問題かもしれませんし、許可されていないかもしれません。
  3. application-delegate-levelapplication:viewControllerWithRestorationIdentifierPath:coder:を使用して、モーダル ビュー コントローラーを返し、そのデリゲートを提示ビュー コントローラーに設定します。App Delegate からその提示 VC を取得できなければなりませんが、うまくいくかもしれません。

今のところ #3 を使用しますが、誰かが推奨できるより良い解決策があれば、私はわくわくします.

同様の問題が発生するセットアップ:

  1. テーブルビューなどのデータソースを設定します。
0 投票する
2 に答える
347 参照

objective-c - ボタンイベントから追加された状態の保存と復元 UIImageView

UIImageViewボタンクリックを追加しています。を使って復元したいUIKit。次の場所で復元識別子を取得しています:

どうすればこれをデコードできUIImageViewますか?

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

ios - xcode 5を使用したios 7での状態の保存と復元

appDelegate に次の 2 つのメソッドを実装し、ストーリーボードの各 viewController に復元 ID を指定して、状態の保存と復元のメカニズムをアプリに実装しようとしています。直面している問題は、アプリを再度開いたときです。前の画面または復元された画面を表示できますが、ほんの一瞬だけで、メイン ストーリーボード ファイルのベース ビュー コントローラーに移動します。

その解決策を教えてください。または、ここで何かを間違えている場合は教えてください。お返事お待ちしております。前もって感謝します。

更新部分:

アプリのデリゲート NSString * const AppDelegateRootVCKey = @"AppDelegateRootVCKey"; で次のメソッドを使用しています。

また、私のアプリの初期化部分は willFinishLaunchingWithOptions にあり、私の didFinishLaunching は次のとおりです

ストーリーボードを介してすべてのコントローラーに復元識別子を与え、コードによって他の.xibにも与えました。したがって、上記の結果は、ストーリーボード画面にいるときはいつでも状態を保持しますが、ヘッダーの戻るボタンまたは他のボタンをクリックして左側/右側のメニュー画面を開くと、セレクターが認識されないという理由でクラッシュします。クラッシュした後、再度開くと、mainStoryboard から開始され、すべて正常に動作します。もう 1 つの問題は、xib 画面でテストするたびに、アプリの状態が保持されず、mainStoryboard からアプリを再起動することです。

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

ios - 状態の復元と保存、UILabel のエンコード

上記のコードは、サブビューとして画面に追加したすべての UILabel を for ループを介してエンコードするために使用されます。ただし、デコードするときに得られるのはコンソールからの (null) だけです。助けてください。

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

ios - アプリがバックグラウンドにある場合、アプリがユーザーまたは IOS によって閉じられたかどうかを判断する方法

状態の保存に取り組んでいます。次の場合にアプリの状態を保持したい

1. バックグラウンドにある場合、メモリ不足のために IOS によって強制終了されます。

次の場合は状態を保存したくありません

2..バックグラウンドにある場合、ユーザーによって強制終了されます

3..フォアグラウンドにある場合、ユーザーによって強制終了されます

@matt が述べたように、1 と 3 は簡単に区別できます。アプリがフォアグラウンドにある場合、ユーザーによって強制終了された場合、状態は保持されません。アプリの状態は、バックグラウンドになった時点で保持されます。

私の質問は、アプリが既にバックグラウンドにある場合、IOS またはユーザーによって強制終了されたかどうかを判断する方法です。

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

ios - IOS 状態の保存: スナップショットの代わりに起動イメージを表示できますか

質問: IOS 状態の保存を使用する場合、起動プロセス中にスナップショットの代わりにカスタム起動イメージを表示するにはどうすればよいですか?

説明: IOS 状態の保存に取り組んでいます。アプリを強制終了した後にアプリを再度開くたびに、アプリが最初に表示するのは、アプリがバックグラウンドに入ったときの画面のスナップショットであることを除いて、すべて正常に機能します。ユーザーの現在地を示す地図ビューがあります。アプリの起動中に古い場所のスナップショットを表示してから、現在の場所にジャンプしたくありません。起動プロセス中にカスタム起動イメージを表示する方法はありますか?

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

ios - Xcode : 終了後のビュー コントローラーのストーリーボードと状態の保存

Xcode でのプログラミングは初めてで、アプリ (ToDo リスト) で問題が発生しています。すべて正常に動作しますが、アプリを終了すると (最小化されません)、メイン ビュー コントローラーは内容を保存しません (ToDo リストがある場合の問題)。ここで、終了時にビュー コントローラーの状態を保持するために実装する必要があるコードと、その場所を知りたいと思います。(アプリ デリゲートまたはメイン ビュー コントローラー ウィンドウ)

.m ファイル:

.h ファイル:

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

ios - UINavigationController からプッシュされた UIViewController を復元して保存します。ストーリーボードはありません

最初のView Controllerからプッシュした単純なUIViewControllerを復元しようとしています。最初のものは保持されますが、2 番目のものは再起動すると消えます。ストーリーボードは使いません。すべてのView Controllerにプロトコルを実装し、それぞれにrestoreIdentifierとrestoreClassを追加します。

2 番目の viewController は 3 番目の viewController から継承し、xib ファイルから初期化されます。UIViewControllerRestoration を直接使用しないため、この 3 番目に実装する必要があるかどうかはわかりません。

私のコードは通常次のようになります。

おそらく、navigationController もサブクラス化して、UIViewControllerRestoration から継承できるようにする必要がありますか?

更新: OK、UIViewController から UIViewController へのプッシュが機能するようです。しかし、UIViewController から UITableViewController へのプッシュ、およびその逆のプッシュは機能しません。テーブルビューが UIViewControllerRestoration プロトコルを実装している場合、アプリがクラッシュします。プロトコルを実装しないと、tableView からプッシュされた UIViewControllers は保持されません。

UITableViewControllers をクラッシュさせずに保持するには、どのように扱うべきですか?

更新: もうクラッシュしません..これは、アプリ固有のメモリ バグが原因でした。しかし、tableView はまだ保持されておらず、プッシュされた viewController も保持されていません。

更新:テーブルビューが正しく復元されなかった理由は、バックグラウンドでデータソースを削除したためです..しかし、モーダルviewControllerをself.navigationController以外の別のnavigationControllerにプッシュしようとすると、モーダルviewControllerが表示されないという問題がまだあります。このモーダル ナビゲーション コントローラーに復元識別子を設定しましたが、ビューが表示されません。

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

ios - UIManagedDocument の Core Data オブジェクトを使用した状態の保存および復元戦略

UIManagedDocument 経由でアクセスする Core Data コンポーネントを含む iOS アプリに、状態の保存と復元のサポートを追加しようと試みています。

ビューコントローラーに復元識別子を追加し始めており、AppDelegate とコントローラー内に必要な関数 (現在は空) を接続しています。

複数のView Controllerによって参照される可能性のあるオブジェクトがあるため、AppDelegate内でこれを保存および復元し、関連するView ControllerにAppDelegateからオブジェクトを取得させるだけです。アプリのデリゲート メソッド didRecodeRestorableState は、すべてのビューが独自の decodeRestorableStateWithCoder メソッドを呼び出した後に発生するため、タイミングが難しい場合があります。

私の主な問題は、この共有クラスと複数の ViewControllers がすべて NSManagedObject プロパティを保持および復元したいということです。これを容易にするためにオブジェクトの URIRepresentation を使用できるようにしたいと考えていますが、問題は、AppDelegate が AppDelegate の willFinishLaunchingWithOptions メソッド内で UIManagedDocument を開くことです。これは、UIManagedDocument openWithCompletionHandler メソッドを介して行われます。このオープニングのスレッドにより、すべてのビューとアプリ デリゲートが保存された状態を復元しようとした後、ドキュメントが正常に開かれます。ドキュメントが使用可能になると、AppDelegate は通知を送信するため、すべてのビュー コントローラーがこの通知をリッスンできます。

私は、これがこれに対処するための最善の戦略なのか、それとも唯一の戦略なのか疑問に思っています。私のオブジェクトは、復元する URIRepresentations を保持する必要があり、ドキュメント (およびそれは NSManagedObjectContext) の準備が整ったら、保存した対応する NSManagedObjects を実際に見つけて設定しようとします。そのため、復元を実行するための呼び出しよりもはるかに遅れて復元が行われているため、通常はすべての復元作業を実行すると想定されます。ドキュメントが開かれ、適切に初期化されるのを待っている間、コントローラーが短時間空に見える可能性があるのではないかと心配しています。

この場合、ドキュメントを開くのをブロックして遅らせる目的があるので、アプリを開くのに時間がかかりますが、少なくともビューが表示される前に必要なすべてのデータをより正しく復元できます。特定のメソッドに時間がかかりすぎないようにするために実行されているタイマーはありますか? この漠然とした状態にある間に別のビューを表示する方が正しいでしょうか。これについてどうすればよいかはよくわかりませんが、ネットワークに依存している Facebook アプリなどの他のアプリで見られるようなものです。繋がり。

これまでのところ、ドキュメント内でこの種の問題の実際の説明を見つけることができないようです。

いつものように、どんな助けも大歓迎です!乾杯