1

プロジェクトで Akavache を使用しています。Android ではすべてがうまく機能しますが、iOS では次のようにキー値をキャッシュに保存すると問題が発生しました。

public async void Salvar(Login login)
{
    await BlobCache.LocalMachine.InsertObject("login", login);
}

デバッグ セッションを停止し、デバッグを再開して、次を使用して値を取得しようとすると、BlobCache はエラーなしで保存されます。

public async Task<Login> Recuperar()
{
            try
            {
                var dados = await BlobCache.LocalMachine.GetObject<Login>("login");

                return dados;
            }
            catch (KeyNotFoundException)
            {
                return null;
            }
}

私は KeyNotFoundException を取得します。なぜ Android ではうまく機能するのかわかりませんが、iOS ではアプリを再起動した後にデータベースがなくなっているようです。

Visual Studio チェックの Xamarin 構成で、[Preserve application data/cache on device between deploy] が true であり、私の

BlobCache.ApplicationName = "AppName"; 

OnStar メソッドで

誰が何が起こっているのか知っていますか?ありがとう

4

5 に答える 5

0

あなたの問題は「ローカルマシン」の使用です

Xamarin.iOSは、BlobCache.LocalMachine に格納されているデータを削除して、ディスク領域を解放することがあります (アプリが実行されていない場合のみ)。BlobCache.UserAccount と BlobCache.Secure の場所は、iCloud と iTunes にバックアップされます。

Xamarin.Androidは、システムのディスク領域が不足している場合、BlobCache.LocalMachine に格納されているデータの削除を開始することもあります。システムがこれをクリーンアップしている間にアプリを実行できるかどうかは明確に指定されていません。

一部のシステムにいくつかの魔法が適用された組み込みの場所が 4 つあります。

BlobCache.LocalMachine - キャッシュされたデータ。このデータは予告なく削除される場合があります。

BlobCache.UserAccount - ユーザー設定。一部のシステムは、このデータをクラウドにバックアップします。

BlobCache.Secure - 資格情報などの機密データを保存するため。

BlobCache.InMemory - メモリに保持されるデータベース。データはアプリの存続期間中保存されます。

むしろ使うべき

public async void Salvar(Login login)
{
  await BlobCache.UserAccount.InsertObject("login", login);
}

[参考:Akavacheドキュメンテーション]

于 2020-12-03T02:28:03.220 に答える