使用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应用程序中配置其他内容。
答案 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;
}
}
添加此内容后,问题应得到解决。