0

使用 xamarin 形式 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 设备/模拟器上尝试它时,它失败且没有错误,getobject<> 只是在重新启动应用程序时返回 null。

是否有任何东西丢失或应该在 ios 应用程序的属性或 info.plist 中配置额外的东西。

4

1 回答 1

2

可能发生的情况是,用于保存到本地计算机的 Akavache 库被链接器“优化”。

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

为了解决这个问题,您需要包含一个类,该类对程序集中的类进行一些虚拟代码引用,否则这些类会“链接出”。您可以在项目的 GitHub上找到它以及更多信息。

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

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

添加后,问题应该得到解决。

于 2018-08-08T12:12:30.527 回答