## 経緯 > [Keyboard not appearing on mobile · Issue \#230 · tadashi\-aikawa/obsidian\-another\-quick\-switcher](https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/issues/230) ## 理由 おそらくcacheの生成が完了していないからと思われる。以下は[[🦉Various Complements]]で同じような事象を回避するために行った対応。`app.metadataCache.on("resolved")`イベントのあとにトークナイズするようにしている。 ```ts // Avoid referring to incorrect cache const cacheResolvedRef = app.metadataCache.on("resolved", async () => { ins.refreshInternalLinkTokens(); ins.refreshFrontMatterTokens(); // noinspection ES6MissingAwait ins.refreshCustomDictionaryTokens(); // noinspection ES6MissingAwait ins.refreshCurrentVaultTokens(); ins.app.metadataCache.offref(cacheResolvedRef); }); ``` ## 対応方針 [[🦉Another Quick Switcher]]はクイックスイッチャー起動直後に情報を取得するため、[[🦉Various Complements]]と同じアプローチは適切ではない。むしろ、cacheが解決するまで機能を使用できないようにする方が安全。見た目上は遅く感じるかもしれないが、使えない機能を提供してもしょうがないので...。 ### リロード時の対応 リロードのときは既にキャッシュが生成されているため、キャッシュのresolvedイベントは発動せず、いつまでたってもコマンドを使用できない。対策が必要。 - `app.metadataCache.initialized` を使う - キャッシュが完全に読み込まれていなくても `true` になってそうなので怪しい - [[🦉Another Quick Switcher]]の初期化時に必ず `initialize` する - 無駄な処理が発生する - [[🦉Another Quick Switcher]]の初期化時に `initialized` が `false` なら `initialize` する - **この対応でいく**