akavache不在iOS模拟器/设备中缓存

时间:2018-08-08 11:51:00

标签: ios xamarin xamarin.forms xamarin.ios akavache

使用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。

是否缺少任何内容,或者应在属性或info.plist中的ios应用程序中配置其他内容。

1 个答案:

答案 0 :(得分:1)

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

基本上,这意味着编译器看不到从iOS项目到DLL的直接引用,该DLL需要将某些内容保存到光盘并将其作为优化删除。 Akavache处理该问题的方法是无提示地返回内存模式。

要解决此问题,您需要包含一个类,该类对程序集中的类进行了一些虚拟的代码引用,否则这些类将被“链接出去”。您可以找到它,以及有关projects' GitHub的更多信息。

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

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

添加此内容后,问题应得到解决。