問題タブ [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 - 状態の復元は機能しますが、viewDidLoad で無効になります
コメントに詳述されている修正を組み込むためにコードが更新されていることに注意してください。ただし、元の質問テキストは次のとおりです。
状態の復元は、以下のコードベースの ViewController で機能しますが、viewDidLoad への 2 回目の呼び出しによって「元に戻されます」。私の質問は次のとおりです。どうすればそれを回避できますか? ブレークポイントを使用するとdecodeRestorableState
、実際には2つのパラメーターが復元されることがわかりますが、その後再びviewDidLoadを通過し、それらのパラメーターはnilにリセットされるため、復元は効果がありません. ストーリーボードはありません。このクラスを空の ViewController に関連付けると機能します (これを再確認しました。ボタン アセットもいくつかありますが、機能には必要ありません)。また、状態の復元を有効にするために必要な AppDelegate メソッドも最後に含めました。selectedGroup
selectedType
AppDelegate の関数は次のとおりです。
ios - CoreBluetooth は、再接続中に特性を再サブスクライブします
私のアプリでは、BLE ペリフェラルに正常に接続し、特性をサブスクライブして、特性値に変更があるたびにアプリに通知を受け取ることができます。ただし、状態の復元中に中央マネージャーが再初期化された後、特性値の変更がアプリに通知されることはありません。以下は、状態の復元中に私が行うことです。
- didFinishLaunchingWithOptions: で、復元識別子を使用して中央マネージャー オブジェクトを再インスタンス化します。
- 次に、centralManager:willRestoreState: メソッドで、以前に接続されていた周辺機器を取得し、
CBCentralManagerRestoredStatePeripheralsKey を使用してそれらに再接続します。
周辺機器に再接続するだけで、最初の起動時に行われるように、特性のサブスクリプションを内部で行うか、サービスを見つけて特性を明示的にサブスクライブしますか?