2016-12-09 7 views
0

В моем приложении пользователь ищет местоположение на карте, а штырь (MKPinAnnotationView) удаляется в этом конкретном месте. Я использую Core Data для хранения информации об этом местоположении (например, название города, широта, долгота и т. Д.)Сохраняющиеся MKPinAnnotationViews с CoreData

Я хочу сохранить MKAnnotationViews, чтобы при повторном открытии приложения «контакты» все еще там ,

Каков правильный способ справиться с этим? Я уже храню широту и долготу в CoreData, но мне бы очень хотелось сохранить всю MKAnnotation с ее заголовком, субтитрами и другими атрибутами непосредственно в CoreData, а затем просто перерисовать их на карте при открытии приложения.

Я использую Objective-C not Swift.

ответ

0

Не знаете, в чем проблема. Я делаю это в Swift не ObjC, но по сути вы просто:

  • Получить данные для точек из CoreData,
  • загрузить его в массив экземпляров аннотаций (я на самом деле получил более сложный класс, Waypoint, который подклассифицирован из NSObject (но следует по протоколу аннотации), так как мне нужно больше информации для пользовательских контактов и рисования полилинии и т. д., но это не должно изменить процесс 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)} 
} 

Помогает ли это, или я не хватает вашей заботы?

+0

Спасибо. Я вижу, что вы там делаете, и я собираюсь сделать снимок с помощью специального класса Annotations. Моя основная проблема заключается в том, что все работает нормально, когда я работаю в приложении (поиск города, удаление аннотации на карте, сохранение данных местоположения в CoreData), но как только я закрою приложение и откройте его снова, аннотаций, которые были на карте, больше нет, поэтому я подумывал о том, как воссоздать эти контакты из данных, хранящихся в основных данных, и отбросить их на карте при загрузке представления (вроде бы похоже, что они «всегда был там». – Alex

+0

Звучит неплохо, вам просто нужно сохранить данные с каждого булавки, поскольку он изначально создан для какой-то записи, а затем вручную регенерировать контакты в следующий раз, когда вы хотите их отобразить. –