viewForAnnotation 未被调用(使用 Alamofire 解析 JSON)
viewForAnnotation not being called (using Alamofire to parse JSON)
我是 iOS 编程新手。我更喜欢使用 Swift。
我想做的是调用 returns 一些 JSON 的 Web 服务,将 JSON 解析为名为 Entry 的自定义对象并将这些条目绘制在地图上.
我正在使用 AlamoFire 进行 Web 服务调用,并使用 SwiftyJSON 将 JSON 解析为如下所示的 Entry 对象
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 请求中映射条目(不知道这是否不好,因为我相信 AlamoFire 是在单独的线程上完成的)。
我还有一个 viewForAnnotations 方法,如下所示
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
print("viewForAnnotation called")
return nil
}
根本没有调用我的 viewForAnnotation 方法(没有命中打印行上的断点)。
感谢任何帮助!
请确保将 mapview 的委托 属性 设置为自己。
mapview.delegate = self
您也可以使用连接检查器(界面生成器)
将 mapview 的委托出口连接到 ViewController
我是 iOS 编程新手。我更喜欢使用 Swift。
我想做的是调用 returns 一些 JSON 的 Web 服务,将 JSON 解析为名为 Entry 的自定义对象并将这些条目绘制在地图上.
我正在使用 AlamoFire 进行 Web 服务调用,并使用 SwiftyJSON 将 JSON 解析为如下所示的 Entry 对象
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 请求中映射条目(不知道这是否不好,因为我相信 AlamoFire 是在单独的线程上完成的)。
我还有一个 viewForAnnotations 方法,如下所示
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
print("viewForAnnotation called")
return nil
}
根本没有调用我的 viewForAnnotation 方法(没有命中打印行上的断点)。
感谢任何帮助!
请确保将 mapview 的委托 属性 设置为自己。
mapview.delegate = self
您也可以使用连接检查器(界面生成器)
将 mapview 的委托出口连接到 ViewController