使用CoreData

时间:2016-12-09 00:24:32

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

在我的应用中,用户在地图上搜索一个位置,并在该特定位置放置一个引脚(MKPinAnnotationView)。我使用核心数据存储有关该位置的信息(例如城市名称,纬度,经度等)

我想保留MKAnnotationViews,以便当用户重新打开应用程序时,"引脚"还在那里。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

鉴于添加的数据,我对Waypoint对象的设置是一个更复杂的init方法,因此我没有显示,但您的设置应该与第一次加载注释值时相同。这里是Swift 3.0版本的MapView加载版本,在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)}
}

这有帮助还是我错过了您的顾虑?