## 経緯
> [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` する
- **この対応でいく**