akavache 未在 ios simulator/device 中缓存

akavache not caching in ios simulator/device

使用 xamarin forms v.3.1 和 akavache v5 + akavache.sqlite3 v5。

在app.xaml.cs我初始化了akavache

       BlobCache.ApplicationName = "EF_Cache";
       BlobCache.EnsureInitialized();

我使用 localmachine 来缓存数据

       await BlobCache.LocalMachine.InsertObject<List<int>>("FavouriteTeams", FavouriteTeam, TimeSpan.FromDays(300));

检索数据我这样做

       var FavouritesList = await BlobCache.LocalMachine.GetObject<List<int>>("FavouriteTeams");

以下代码在 android 设备上工作正常,没有问题,但是当我在 ios device/simulator 上尝试它时,它没有错误地失败,getobject<> 只是 return 重新启动应用程序时为空。

属性中的 ios 应用程序或 info.plist 中是否缺少任何东西或应该配置额外的东西?

可能发生的情况是链接器获取 "optimized out" 用于保存到本地计算机的 Akavache 库。

基本上,这意味着编译器没有从您的 iOS 项目中看到对将某些内容保存到光盘所需的 DLL 的直接引用,并将其作为优化删除。 Akavache 处理它的方式是静默地返回内存模式。

为了解决这个问题,您需要包含一个 class,它在程序集中对 classes 进行一些虚拟代码引用,否则 "linked out"。您可以在 projects' GitHub.

上找到它和更多信息

将此 class 添加到您的 iOS 项目中,最好也将其添加到您的 Android 项目中。

public static class LinkerPreserve
{
  static LinkerPreserve()
  {
    var persistentName = typeof(SQLitePersistentBlobCache).FullName;
    var encryptedName = typeof(SQLiteEncryptedBlobCache).FullName;
  }
}

加上这个之后,问题应该就解决了