2016-12-30 4 views
0

У меня есть приложение, в котором я получаю данные из модели Core Data, которые затем я хочу представить на карте. Когда я добавляю аннотации к представлению карты, я получаю ошибку: Не могу отличить значение типа 'Swift._ContiguousArrayStorage <>'() до 'MKAnnotation'(). Эта же логика работала с Swift 2, но, видимо, не с Swift 3. Где и как добавить обозначения к виду карты. Код:Ошибка добавления аннотаций для отображения карты

override func viewDidAppear(_ animated: Bool) { 

    var rainFallGauges = [RainFallGauge]() 
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "RainFallGauge") 

    do { 
     rainFallGauges = try coreDataStack.context.fetch(fetchRequest) as! [RainFallGauge] 

     obsCount = rainFallGauges.count 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 

    if obsCount == 0 { 

     let alert = UIAlertController(title: "Sorry", message: "No gauges found", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } else { 

     for rainFallGauge in rainFallGauges { 

      resultsGauge = rainFallGauge.value(forKey: "gaugeName") as? String 
      resultsLatitude = rainFallGauge.value(forKey: "gaugeLatitude") as? String 
      resultsLongitude = rainFallGauge.value(forKey: "gaugeLongitude") as? String 
      print(resultsGauge) 

      if (resultsLatitude != nil && resultsLongitude != nil) && (resultsLatitude?.isEmpty == false && resultsLongitude?.isEmpty == false) { 
       let latNSString = NSString(string: resultsLatitude!) 
       setLatitude = latNSString.doubleValue 
       print(setLatitude) 

       let longNSString = NSString(string: resultsLongitude!) 
       setLongitude = longNSString.doubleValue 
       print(setLongitude) 

       self.gauges.append(Gauges(gaugeTitle: resultsGauge, latitude: setLatitude, longitude: setLongitude)) 
       print(gauges.count) 
      } else if gauges.count == 0 { 
       let alert = UIAlertController(title: "Sorry", message: "No gauges", preferredStyle: UIAlertControllerStyle.alert) 
       alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
       self.present(alert, animated: true, completion: nil) 
      } 
     } 
    } 

    self.gaugeMap.delegate = self 
    self.gaugeMap.addAnnotation(self.gauges as! MKAnnotation) 

    gaugeMap.mapType = .hybrid 

    let rectToDisplay = self.gauges.reduce(MKMapRectNull) { 
     (mapRect: MKMapRect, gauge: Gauges) -> MKMapRect in 
     let placePointRect = MKMapRect(origin: gauge.location.mapPoint, size: MKMapSize(width: 0, height: 0)) 

     return MKMapRectUnion(mapRect, placePointRect) 
    } 

У меня есть массив «датчики», объявленные выше как:

var gauges = [Gauges]() 

и создали класс Манометры для хранения соответствующей информации для аннотаций.

Любые предложения, которые приведут меня к правильному синтаксису для оператора addAnnotation и того, куда он должен идти, будут оценены.

+0

Эта линия не имеет никакого смысла: 'self.gaugeMap.addAnnotation (self.gauges as! MKAnnotation) 'Если' self.gauges' является '[Gauges]', как это может быть MKAnnotation? Не говорите мне, что работали как-то в Swift 2; это бессмыслица, независимо от того, на каком языке вы разговариваете. – matt

+0

является подклассом Gauges MKAnnotation? –

+0

Благодарим вас за ценные идеи, я неправильно прочитал строку в своем старом приложении, это было на самом деле: – user1698875

ответ

0

Благодарим вас за понимание. Я неправильно интерпретировал линию в моем старом приложении, это было на самом деле:

self.speciesMap.addAnnotations(self.places) 

Я решил свою проблему за счет упрощения и собирается:

for rainFallGauge in rainFallGauges { 

      resultsGauge = rainFallGauge.value(forKey: "gaugeName") as? String 
      resultsLatitude = rainFallGauge.value(forKey: "gaugeLatitude") as? String 
      resultsLongitude = rainFallGauge.value(forKey: "gaugeLongitude") as? String 
      print(resultsGauge) 

      if (resultsLatitude != nil && resultsLongitude != nil) && (resultsLatitude?.isEmpty == false && resultsLongitude?.isEmpty == false) { 
       let latNSString = NSString(string: resultsLatitude!) 
       setLatitude = latNSString.doubleValue 
       print(setLatitude) 

       let longNSString = NSString(string: resultsLongitude!) 
       setLongitude = longNSString.doubleValue 
       print(setLongitude) 

       gaugeMap.addAnnotation(OneGauge(title: resultsGauge, subtitle: "", coordinate: CLLocationCoordinate2D(latitude: setLatitude, longitude: setLongitude))) 

      } 
     } 
    } 
    gaugeMap.mapType = .hybrid 
Смежные вопросы