【问题标题】:Akavache: saved value not available after iOS app restartAkavache:iOS 应用重启后保存的值不可用
【发布时间】:2018-02-01 11:48:23
【问题描述】:

我在 iOS 上使用 Akavache 标准方法(实际上,它是适用于 Android/iOS 的 .NET Standard 项目),但问题仅出现在 iOS 上。

我在应用生命周期中节省了一些价值:

    await BlobCache.Secure.InsertObject("user", user);

在应用程序新会话上:

    var user = await BlobCache.Secure.GetObject<UserModel>("user");

但对象不可用(KeyNotFoundException 异常)。

最近我也尝试在对象保存后立即调用BlobCache.Secure.Flush().Wait(),但仍然没有效果。

此问题仅发生在 iOS 上。安卓没问题。 Secure 和 UserAccount 对象都会出现此问题。

即使在“温和”BlobCache.Shutdown().Wait() 关闭应用程序后,数据也不可用。所以,现在甚至不知道在哪里搜索解决方案。

任何想法为什么会导致此问题以及如何解决?

【问题讨论】:

  • 这方面有进展吗?

标签: ios xamarin akavache


【解决方案1】:

人们遇到的另一个问题是 SqlLite 缓存正在链接出去。如果你检查 LocalMachine 上的类型,它的类型是 MemoryCache ,它不会有弹性。

只需在项目中的某处添加the linker static class(即使它是 PCL 或标准库)。

这对我有用。

【讨论】:

    【解决方案2】:

    您是否在BlobCache 上设置了ApplicationName 属性?在 iOS 上,这似乎比在 Android 上更需要。

    【讨论】:

    • 是的。它已根据文档正确设置。非常简单明了。
    • 您是否尝试过使用User blob?因为Secure 无论如何都是一个虚拟实现。 (在 iOS 上根本不安全。)
    • 这是您的问题吗? stackoverflow.com/questions/47279254/… iOS 喜欢将用于保存内容的 dll 链接到持久存储中。如果它被链接出去,那么缓存只使用非持久性的 InMemory Cache。 Android 确实没有同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多