У меня есть вид карты с пользовательскими аннотациями. Аннотации загружаются из coreData. Я хотел бы, чтобы пользователь мог нажимать на аннотацию, чтобы редактировать или удалять контакты.
Я действительно изо всех сил пытаюсь удалить только выбранную аннотацию. Я новичок в программировании и еще новее в Core Data, поэтому прошу прощения за любое невежество.
Вот функция, которую я пытаюсь заставить работать. С помощью этой функции ничего не удаляется и не печатается.
func deletePin() {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let requestDel = NSFetchRequest<NSFetchRequestResult>(entityName: "Fish")
let thisCatch = selectedAnnotation?.title
requestDel.returnsObjectsAsFaults = false
let predicateDel = NSPredicate(format: "species == %d", thisCatch!)
requestDel.predicate = predicateDel
do {
let locations = try context.fetch(requestDel)
for location in locations{
context.delete(location as! NSManagedObject)
self.map.removeAnnotation(selectedAnnotation!)
print("pinDeleted")
}
} catch {
print("Failed")
}
do {
try context.save()
} catch {
print("Failed saving")
}
}
Вот расширение, где я пытаюсь вызвать deletePin ()
extension MapViewController: ExampleCalloutViewDelegate {
func mapView(_ mapView: MKMapView, didTapDetailsButton button: UIButton, for annotation: MKAnnotation) {
let alert = UIAlertController(title: "Edit or Delete", message: "Any changes are permenate!", preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
let deleteDataAction = UIAlertAction(title: "delete", style: .destructive, handler: { action in
self.deletePin()
// self.map.removeAnnotation(annotation)
// print(annotation.title!)