2015-12-09 5 views
1

У меня есть простой массив или MKAnnotes для объектов местоположения, которые извлекаются из CoreData при загрузке вида. Когда я удаляю объект местоположения, я также вручную удаляю объект местоположения из массива. После удаления из массива я вызываю removeAnnotations(), а затем addAnnotations() на основе массива. Я заметил, что MKAnnotationView больше не находится в удаленном месте, однако он не удаляется из MapView, который перемещается только на 0º lat 0º lon.MKAnnotationView не удаляется из MKMapView

Я не уверен, что я делаю неправильно, чтобы полностью удалить его из MapView.

*** Примечание: Я следую учебному пособию, а для учебных процессов я вручную обновляю массив местоположений вместо использования NSFetchedResultsController.

Мысли?

Вот код:

var managedObjectContext: NSManagedObjectContext! { 
    didSet { 
     NSNotificationCenter.defaultCenter().addObserverForName(NSManagedObjectContextObjectsDidChangeNotification, object: managedObjectContext, queue: NSOperationQueue.mainQueue()) { notification in 
      if self.isViewLoaded() { 
       if let dictionary = notification.userInfo { 

        if dictionary["inserted"] != nil { 

         print("*** Inserted") 
         let insertedLocationSet: NSSet = dictionary["inserted"] as! NSSet 
         let insertedLocationArray: NSArray = insertedLocationSet.allObjects 
         let insertedLocation = insertedLocationArray[0] as! Location 
         self.locations.append(insertedLocation) 

        } else if dictionary["deleted"] != nil { 

         print("*** Deleted") 
         let deletedLocationSet = dictionary["deleted"] as! NSSet 
         let deletedLocationArray = deletedLocationSet.allObjects 
         let deletedLocation = deletedLocationArray[0] as! Location 

         if let objectIndexInLocations = self.locations.indexOf(deletedLocation) { 

          self.locations.removeAtIndex(objectIndexInLocations) 

         } 

        } 
       } 
      } 

      self.drawAnnotations() 

     } 
    } 
} 

var locations = [Location]() 


func updateLocations() { // called by viewDidLoad() 

    let entity = NSEntityDescription.entityForName("Location", inManagedObjectContext: managedObjectContext) 

    let fetchRequest = NSFetchRequest() 
    fetchRequest.entity = entity 

    locations = try! managedObjectContext.executeFetchRequest(fetchRequest) as! [Location] 

    drawAnnotations() 

} 

func drawAnnotations() { 

    mapView.removeAnnotations(locations) 
    mapView.addAnnotations(locations) 

} 
+0

Можете ли вы показать 'drawAnnotations)' метода (? Вы вызываете метод removeAnnotation (:) 'на карте в любом месте вашего кода? – Losiowaty

ответ

2

Ваша проблема заключается в том, что при выполнении mapView.removeAnnotations(locations)locations массив уже не была обновлена ​​и удалена аннотаций уже не в этом массиве, поэтому он не удаляется. Вы можете удалить все текущие аннотаций, ссылаясь на annotations собственности на самой MapView -

func drawAnnotations() { 
    mapView.removeAnnotations(mapView.annotations) 
    mapView.addAnnotations(locations) 
} 
+0

Спасибо! Это исправило это! – Bren

Смежные вопросы