【问题标题】:Persisting MKPinAnnotationViews with CoreData具有核心数据的持久 MKPinAnnotationView
【发布时间】:2016-12-09 00:24:31
【问题描述】:

在我的应用中,用户在地图上搜索一个位置,然后在该特定位置放置一个图钉 (MKPinAnnotationView)。我正在使用 Core Data 来存储有关该位置的信息(例如城市名称、纬度、经度等)

我想保留 MKAnnotationViews,这样当用户重新打开应用程序时,“引脚”仍然存在。

处理这个问题的正确方法是什么?我已经在 CoreData 中存储了纬度和经度,但我真的很想将整个 MKAnnotation 及其标题、副标题和其他属性直接存储在 CoreData 中,然后在打开应用程序时在地图上重新绘制它们。

我使用的是 Objective-C 而不是 Swift。

【问题讨论】:

    标签: ios objective-c core-data mkmapview mkannotationview


    【解决方案1】:

    不确定您的问题是什么。我在 Swift 而不是 ObjC 中这样做,但本质上你只是:

    • 从 CoreData 获取点的数据,
    • 将其加载到注解实例数组中(我实际上有一个更复杂的类 Waypoint,它是 NSObject 的子类(但遵循注解协议),因为我需要更多关于自定义引脚和折线绘制等的信息.,但这不应该改变 MapView 进程),并且
    • 在 Mapview 中添加/显示注释,我假设您第一次这样做。

    鉴于添加的数据,我对 Waypoint 对象的设置是一个更复杂的 init 方法,所以我没有展示它,但您的设置应该与您第一次加载注释值时的设置相同。这是加载到 MapView 的 Swift 3.0 版本,这在 Swift 中很简单 - 但在 ObjC 中应该没有太大不同,因为它只是调用 API:

     // Display a set of Waypoints for a Track
    
     private func handleWaypoints(_ waypoints: [MKAnnotation])
     {
         mapView.addAnnotations(waypoints)
         mapView.showAnnotations(waypoints, animated: false)
     }
    

    由于我循环浏览地图,因此在执行上述加载之前,我还使用调用来确保地图是干净的,这只是:

    private func clearAnnotations()
    {
        if mapView?.annotations != nil { mapView.removeAnnotations(mapView.annotations ) }
        if mapView?.overlays != nil {mapView.removeOverlays(mapView.overlays)}
    }
    

    这有帮助还是我错过了您的担忧?

    【讨论】:

    • 谢谢。我看到你在那里做了什么,我会用一个自定义的 Annotations 类来试一试。我的主要问题是当我在应用程序中工作时一切正常(搜索城市,在地图上放置注释,将位置数据保存到 CoreData),但是一旦我关闭应用程序并再次打开它,地图上的注释已经不存在了,所以我正在考虑一些方法来从存储在核心数据中的数据中重新创建这些图钉,并在视图加载时将它们放在地图上(有点让它看起来像它们'一直在那里)。
    • 听起来不错,您只需将最初创建的每个引脚的数据保存到某种记录中,然后在下次要显示它们时手动重新生成引脚。
    猜你喜欢
    • 2015-02-03
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2020-12-09
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多