基于MKAnnotion删除核心数据对象
Deleting core data object based on MKAnnotion
我正在基于核心数据将注释存储和加载到地图上。
我不确定如何点击注释并删除该 pin 的核心数据。
与在表视图中不同,没有真正的索引路径可以从我获取的对象数组中删除。我能想到的在屏幕上跟踪我的注释的唯一方法是给它们一个标签,并将其与我获取的结果数组对齐,但我觉得必须有更好的方法。
我知道如何在 pin 上实现点击,但是一旦我选择了该 pin,我如何将它与创建它的 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)
}
解决您的问题的一种方法是创建一个符合 MKAnnotation 的 class,它包含对您的核心数据对象 (NSManagedObjectID) 的引用。当你 select pin 时,你将有权访问此对象,因此你可以使用核心数据对象 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
}
}
`
我正在基于核心数据将注释存储和加载到地图上。
我不确定如何点击注释并删除该 pin 的核心数据。
与在表视图中不同,没有真正的索引路径可以从我获取的对象数组中删除。我能想到的在屏幕上跟踪我的注释的唯一方法是给它们一个标签,并将其与我获取的结果数组对齐,但我觉得必须有更好的方法。
我知道如何在 pin 上实现点击,但是一旦我选择了该 pin,我如何将它与创建它的 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)
}
解决您的问题的一种方法是创建一个符合 MKAnnotation 的 class,它包含对您的核心数据对象 (NSManagedObjectID) 的引用。当你 select pin 时,你将有权访问此对象,因此你可以使用核心数据对象 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
}
} `