Я новичок в программировании на 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 не вызывается на всех (точки останова на печать линии не является хитом).
Любая помощь приветствуется!
является mapView.delegate = сам добавляются в качестве методы части viewDidLoad или подключен выход MAPview делегата на ViewController? – rshankar
У меня есть расширение класса моего ViewController, которое определяется как таковое: расширение MapViewController: MKMapViewDelegate и viewForAnnotation определено в моем расширенном классе. –
Это нормально, но как будет контролировать viewcontroller, что он должен обрабатывать методы MKMapViewDelegate без установки свойства делегирования mapView? – rshankar