基于MKAnnotion删除核心数据对象

时间:2017-06-16 00:17:28

标签: ios swift core-data mkannotation

我根据coredata在地图上存储和加载注释。

我不确定如何点击注释并删除该针脚的coredata。

与tableview不同,从我的fetched objects数组中删除没有真正的indexPath。我能想到在屏幕上跟踪我的注释的唯一方法就是给它们一个标记,并用我的结果数组排成一行,但我觉得必须有更好的方法。

我知道如何在引脚上实现点击,但是一旦我选择了该引脚,我该如何将其与从中创建的coredata对象绑定?

func loadPins(){
        let pinRequest : NSFetchRequest<Pin> = Pin.fetchRequest()
        do {
           pins = try managedObjectContext.fetch(pinRequest)
        } catch {
           print("There was en error fetching pins")
        }
        for pin in pins {
            let lat = pin.latitude
            let lon = pin.longitude
            let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)
            createAnnotation(coordinate: coordinate)
        }
    }



func createAnnotation(coordinate : CLLocationCoordinate2D){
        let annotation = MKPointAnnotation()
        annotation.coordinate = coordinate
        annotation.title = "henlo"
        map.addAnnotation(annotation)
    }

1 个答案:

答案 0 :(得分:1)

解决问题的一种方法是创建一个符合MKAnnotation的类,该类包含对核心数据对象(NSManagedObjectID)的引用。当您选择该引脚时,您将可以访问此对象,因此可以使用核心数据对象ID,以便获取对象并将其删除。

[managedObjectContext existingObjectWithID:objectID error:nil];

`final class MapViewAnnotation:NSObject,MKAnnotation {

let NSManagedObjectID: objectID
let coordinate: CLLocationCoordinate2D
let title: String?
let subtitle: String?

init(objectID: NSManagedObjectID, coordinate: CLLocationCoordinate2D, title: String?=nil, subtitle: String?=nil ) {
    self.objectID = objectID
    self.coordinate = coordinate
    self.title = title
    self.subtitle = subtitle
}

} `