2015-07-22 5 views
0

Я новичок в программировании на iOS. Я предпочитаю использовать Свифт.viewForNnotation не называется (используя Alamofire для разбора JSON)

То, что я пытаюсь сделать, это вызвать веб-службу, которая возвращает некоторый JSON, разобрать JSON в пользовательский объект с именем Entry и начертить эти записи на карте.

Я использую AlamoFire, чтобы сделать вызов веб-службы и SwiftyJSON для разбора JSON в запись объектов, как показано ниже

request(.GET, URLString: "https://myURLThatReturnsJson") 
     .responseJSON { (_, _, json, error) in 

      if let json: AnyObject = json{ 

       let jsonEntries = JSON(json) 

       for result in jsonEntries["entries"].arrayValue { 
        let business_name = result["business_name"].stringValue 
        let latitude = result["lat"].stringValue 
        let longitude = result["lng"].stringValue 
        let category = result["category"].stringValue 
        let address = result["address"].stringValue 
        let city = result["city"].stringValue 
        let type = result["type"].stringValue 
        let location = result["location"].stringValue 
        let valid = result["valid"].stringValue 
        let comments = result["comments"].stringValue 
        let date = result["date"].stringValue 
        let username = result["username"].stringValue 
        let additional_comment_count = result["additional_comment_count"].stringValue 


        let entry : Entry = Entry(
         business_name: business_name, 
         latitude: latitude, 
         longitude: longitude, 
         category: category, 
         address: address, 
         city: city, 
         type: type, 
         location: location, 
         valid: valid, 
         comments: comments, 
         date: date, 
         username: username, 
         additional_comment_count: additional_comment_count, 
         title: business_name, 
         subtitle: location, 
         coordinate: CLLocationCoordinate2D(latitude: (latitude as NSString).doubleValue, longitude: (longitude as NSString).doubleValue)) 

        entries.append(entry) 
       } 

       // Now we have our array of entries. Now plot them. 

       for entry in entries{ 

        self.mapView.addAnnotation(entry) 

       } 
      } 
    } 

Так как вы можете видеть в коде выше, я также отображающей записи в AlamoFire request (не знаю, плохо ли это, потому что AlamoFire выполняется в отдельном потоке, я считаю).

У меня также есть метод viewForAnnotations, который выглядит, как показано ниже

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
     print("viewForAnnotation called") 

     return nil 
    } 

Мой метод viewForAnnotation не вызывается на всех (точки останова на печать линии не является хитом).

Любая помощь приветствуется!

+0

является mapView.delegate = сам добавляются в качестве методы части viewDidLoad или подключен выход MAPview делегата на ViewController? – rshankar

+0

У меня есть расширение класса моего ViewController, которое определяется как таковое: расширение MapViewController: MKMapViewDelegate и viewForAnnotation определено в моем расширенном классе. –

+0

Это нормально, но как будет контролировать viewcontroller, что он должен обрабатывать методы MKMapViewDelegate без установки свойства делегирования mapView? – rshankar

ответ

2

Обязательно установите для свойства delegate mapview значение self.

mapview.delegate = self 

Вы также можете сделать это, подключив выход делегата от MapView к ViewController с помощью Connection Inspector (Interface Builder)

+0

Благодарим за помощь! –

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

  • Нет связанных вопросов^_^