【问题标题】:How can I clear MKMapView's cache of map tiles?如何清除地图切片的 MKMapView 缓存?
【发布时间】:2011-05-21 15:17:45
【问题描述】:

我正在开发一个基于 MKMapView 的 iPhone / iPad 地图应用程序,该应用程序覆盖了我自己的基本基本地图,以提供一些有限的功能,即使用户处于离线状态并且无法访问 Google 的地图图块服务器。

此功能正在运行 - 但我在每次新构建后都很难对其进行测试,因为我找不到刷新/重置 iOS 地图切片缓存的方法。 iOS 缓存甚至可以在 iOS 设备的电源循环和重新启动后继续存在。我过去放大的任何地方都会使用之前测试会话的内存中的图块进行渲染。

有没有办法强制 iOS 刷新其地图缓存?现在我能想到的唯一选择是每次我需要进行测试时重新刷新操作系统。

谢谢!

顺便说一句:这几乎与this question 重复,但在这种情况下,问题不是使用空缓存进行测试,而是释放内存。那里给出的公认答案集中在 RAM 问题上,与我在这里遇到的问题不同。

【问题讨论】:

    标签: iphone caching ios mapkit mkmapview


    【解决方案1】:

    在创建MKMapView 的任何实例之前尝试将NSURLConnection 缓存大小设置为零

        NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
    [NSURLCache setSharedURLCache:sharedCache];
    [sharedCache release];
    

    这可能会使您的连接停止存储缓存数据,因为缓存剩余大小将始终不足

    【讨论】:

    • 你知道NSURLCache会影响MKMapView吗?从我的实验来看,地图查看器似乎有自己独立的缓存空间,但我可能错了。
    • 嗨@radven!实际上,起初我对MKMapViewNSURLCache 持怀疑态度,但后来我尝试子类化NSURLCache 以跟踪从我的应用程序建立的所有连接,我看到MKMapView google 调用通过缓存。你可以看到我是如何在这个线程中实现的stackoverflow.com/questions/5381687/ios-track-url-connections/…
    • 我正在尝试您在另一个问题上详述的方法,但运气不佳。在我以前从未看过的地图区域的平移和缩放过程中,我只接到了一次对 cachedResponseForRequest: 函数的调用,它被记录为“google.com/glm/mmap”,我原本预计每个 Google 磁贴都会调用一次。我错了吗?
    【解决方案2】:

    我偶然发现了这个问题,这当然是一个有趣的问题。显然,MKMapView 正在将图块保存到磁盘的某个位置(因为它在重新启动后仍然存在)。我想知道一个潜在的解决方案是否是 1) 找到缓存切片的保存位置,然后 2) 在您的应用程序启动时以编程方式删除该缓存。这将需要越狱设备才能让您在应用程序沙箱之外访问文件。显然不适合分发,但测试大概是可以接受的。

    也就是说,当我遇到这个问题时,我最终只是实现了自己的平铺地图视图并运行可达性测试以确定是显示谷歌地图还是我的离线模式。

    【讨论】:

      【解决方案3】:

      我们还没有找到从应用程序中清除 MKMapView 缓存的方法,但您可以在 Settings\General\Reset 上“重置所有内容和数据”。 虽然这并不理想,但它比“重新刷新操作系统”要快得多,实际上只需要几分钟。 重置后,您还设置了设备并重新加载应用程序,但这还需要几分钟。

      【讨论】:

        猜你喜欢
        • 2010-12-27
        • 2011-11-04
        • 1970-01-01
        • 2012-05-04
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 2011-02-22
        相关资源
        最近更新 更多