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

ios - iOS での状態の復元

アプリケーション画面を保存しているので、アプリケーションを開くと、保存された画面が表示されます。アプリケーションはナビゲーションベースです。

メイン ストーリー ボードの 2 つのビュー コントローラーに復元 ID を割り当てました。最初のコントローラーは、ナビゲーション コントローラーのルート ビュー コントローラーです。また、ナビゲーション コントローラーに復元 ID を割り当てました。問題は、アプリケーションを実行すると、次の警告が表示されることです。

修復中のマーカー ファイルを作成できません。

他に何をする必要があるのか​​ わかりません。

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

ios - コア Bluetooth 状態の保存と復元が機能しない、アプリをバックグラウンドで再起動できない

アプリが実行されていないときでも、コアBluetoothがアプリを起動しようとしています。

Apple が述べているように、「状態の保存と復元は Core Bluetooth に組み込まれているため、アプリはこの機能を選択して、システムにアプリの中央マネージャーと周辺マネージャーの状態を保存し、特定の Bluetooth 関連タスクを実行し続けるように要求できます。これらのタスクのいずれかが完了すると、システムはアプリをバックグラウンドで再起動し、アプリにその状態を復元してイベントを適切に処理する機会を与えます。」

この機能をオプトインするために、次のコードを追加しました。

しかし、アプリが起動したときのコールバックはトリガーされませんでした。

これらの 2 つが呼び出されることはありません。

このウェイクアップ機能をテストする方法:

  1. info.plist のバックグラウンド モードに「bluetooth central」を追加して、BLE がバックグラウンドで実行されるようにします。

  2. 私のiPhone No.1でcentralManagerを起動します。スキャン開始。

  3. ホームを押して外に出て、メモリを大量に消費するゲームをプレイすると、デバッグログに次のように表示されます:「メモリ不足のため終了しました。プロセスは終了コード0で終了しました」これは、iOS システムがメモリ不足のためにバックグラウンド アプリを終了する方法をシミュレートするためです。

  4. 別のiphone2号でビーコンを起動し、ブロードキャストを開始します。

  5. 結果: これらの再起動コールバックは呼び出されません。

これが機能しない理由はありますか?API の問題である場合、携帯電話が BLE ビーコンに近づいたときにアプリを BLE でバックグラウンドに再起動する他の方法はありますか? ibeacon を使用してアプリを起動しようとしましたが、コア Bluetooth セントラル マネージャーでは、バックグラウンドで ibeacon に接続できません。

ありがとう!

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

ios - UIViewController 状態の復元 - 弱い関係

UIViewControlleriOS 6 では、Apple はおよび関連するクラスに状態の復元を追加しました。これにより、アプリケーションは終了時に状態を保存し、ユーザーがアプリケーションを再開したときに状態を復元できます。

すべてが正常に機能しているように見えますが、パターンに収まりたくない奇妙なシナリオに到達しました。

2 つのビュー コントローラーがViewControllerOneありViewControllerTwo、両方とも、正常に復元される任意の状態を格納しているとします。ViewControllerOne次に、delegateプロパティがあり、それがそのデリゲートであると想像してみましょうViewControllerTwo(これは、モーダル ビュー コントローラーの一般的なパターンです)。この関係を回復する責任は誰にありますか? そして、それはどのように保存/復元されることになっていますか?

私の特定のケースでは、ストーリーボードは関係ありません。復元は、 restorationClassプロパティを介してコードで行われます。私の最初の本能は、restoreClass でビュー コントローラーを作成しながら関係を復元しようとするrestorationClassことでしたが、他の既存のコントローラーがわからないため、そのような関係を完全に復元することはできません。

あるいは、delegate関係を復元するはずのプロパティを宣言するのがView Controllerである場合、他のクラスで復元されたコントローラーインスタンスはどうなりますか?

要するに、これは十分に文書化されていないシナリオのようであり、誰かがそれに光を当ててくれることを望んでいました.

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

ios - アプリがバックグラウンドになったときに NSDate を設定し、状態復元で保存して復元します

私のアプリにはタイマーがあり、アプリがバックグラウンドになると一時停止します。
アプリがフォアグラウンドに戻ったときに適切なタイミングを保つために、次のようにNSDate呼び出さexitDateれたを設定AppDelegateします。

そして次のようにNSDate呼び出さreentryDateれます:

次に、両方の s の差を取得し、NSDateそれらをタイマーに追加します。

アプリがバックグラウンドで終了しない限り、これはすべて正常に機能します。
終了した場合、アプリは最初 viewControllerから起動し、タイマーは停止しています。

その問題を解決するために、状態の復元を使用します。これもうまくいきます。
アプリが終了しても、アプリは事前に保存したすべてのもので最後に再起動します。 viewController

状態の復元で保存されないように見える唯一のものは、exitDate私が明示的にそうするように頼んだにもかかわらずです。

アプリが戻ってくると、 はexitDate常に nil になります。

exitDate次のようにメソッドが呼び出された後、おそらく設定される時間と関係があると思います:

exitDate問題は、-applicationWillTerminateで設定しようとしまし-applicationDidEnterBackground-applicationWillResignActiveが、アプリがバックアップを開始するたびにexitDatenilです。

何か案は?

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

ios - 状態の復元、SKScene を傍受して一時停止する方法

私は絶対に初歩的な状態の保存と復元、アプリデリゲートのコードを実行しています:

私のアプリも非常に初歩的で、SKScene を含む単一のビューです。このコードは美しく機能し、アプリが中断されたときにアプリとシーンの状態が保存され、再度開いたときに以前の状態に戻ります。

ただし、これはアクション ゲームであるため、状態が復元された後、SKScene の ACTIONS が再び開始されるまでに 1 秒か 2 秒をユーザーに与えたいと思います...物事が始まる前に、ユーザーがコントロールなどに指を戻すことができるようにします移動...したがって、これを行う方法がわかりません。復元プロセスのコールバックの場所です(シーンが復元された後、再起動する前に、すべてのアクションを1、2秒、または何でも好きなだけ一時停止するコードを作成できますか)活用できるコールバック メソッドがあると思いますが、それが何であるかはわかりません。

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

ios - iOS での状態の復元中に app delege didfinishlaunching が呼び出されない

アプリの実行に不可欠なセットアップ方法がいくつかあります。これらは、デリゲートがオプションで起動を終了したアプリで呼び出されます。

状態の復元を使用していますが、アプリが復元されたときにこのメソッドが呼び出されないため、アプリが失敗しています。

これらのメソッドをどこに移動して、状態の復元時に呼び出すことができますか?

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

ios - iOS のナビゲーション コントローラーでビューに状態を復元するときにエラーが発生しました

アプリを起動すると、次のエラーが表示されます。

状態の復元中に例外が発生しました セグエ 'mySegue' のナビゲーション コントローラーが見つかりませんでした。プッシュ セグエは、ソース コントローラーが UINavigationController のインスタンスによって管理されている場合にのみ使用できます。

このセグエは、ナビゲーション コントローラー内のビューに接続されています。私のアプリのナビゲーションは次のようになります。

UITabBarController>UiNavigationController子を使用 >UIViewControllerナビゲーション コントローラーに埋め込み > ユーザーが最初のビュー コントローラーをクリックし、「mySegue」セグエ経由で遷移すると、別のビュー コントローラー。

私のナビゲーションコントローラーは、インターフェイスで次のように見える標準のナビゲーションコントローラーです。

この実装には、オーバーライド メソッドと 2 つの復元メソッドしかありません。

UIViewController がナビゲーション コントローラーにある場合、このエラーが発生するのはなぜですか?