0
我已经创建了一组“IssueLocation”'s,这符合MKAnnotation协议的一类。为什么我的注释(从API JSON数据构建而来)没有出现在我的地图视图中?为什么我的标注没有出现在我的地图视图中?
这里是它背后的所有代码:
类代码:
class IssueLocation: NSObject, MKAnnotation {
var locationName: String
var campusName: String
var latitude: Double
var longitude: Double
var coordinate: CLLocationCoordinate2D
init(locationName: String, campusName: String, latitude: Double, longitude: Double, coordinate: CLLocationCoordinate2D) {
self.locationName = locationName
self.campusName = campusName
self.latitude = latitude
self.longitude = longitude
self.coordinate = coordinate
super.init()
}
var subtitle: String? {
if (latitude == 44.22438242146097) {
return "West Campus"
} else {
return "Main Campus"
}
}
var title: String? {
return locationName
}
func mapItem() -> MKMapItem {
let addressDictionary = [String(kABPersonAddressStreetKey): locationName]
let placemark = MKPlacemark(coordinate: coordinate, addressDictionary: addressDictionary)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = locationName
return mapItem
}
}
创建一套IssueLocations的:
func populateMapObjects() {
if populatingMapObjects {
return
}
populatingMapObjects = true
self.loadingIndicator.startAnimating()
var index = 0
Alamofire.request(GWNetworking.Router.MapObjects).responseJSON() { response in
if let JSON = response.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)) {
/* Making an array of all the node IDs from the JSON file */
if (JSON .isKindOfClass(NSArray)) {
for _ in JSON as! [Dictionary<String,AnyObject>] {
if let issueLocation: IssueLocation = IssueLocation(locationName: "Center of the universe", campusName: "Queen's University", latitude: 44.22661586877309, longitude: -76.49380087852478, coordinate: CLLocationCoordinate2D(latitude: 44.22661586877309, longitude: -76.49380087852478)) {
if let locationName = JSON[index]["name"] as? String {
issueLocation.locationName = locationName
}
if let latitude = JSON[index]["coordinates"]!![1] as? Double {
issueLocation.latitude = latitude
}
if let longitude = JSON[index]["coordinates"]!![0] as? Double {
issueLocation.longitude = longitude
}
issueLocation.coordinate = CLLocationCoordinate2D(latitude: issueLocation.latitude, longitude: issueLocation.longitude)
index = index+1
self.mapObjects.append(issueLocation)
}
}
}
dispatch_async(dispatch_get_main_queue()) {
self.loadingIndicator.stopAnimating()
self.populatingMapObjects = false
print(self.mapObjects.count)
}
}
}
}
}
最后,这是我尝试添加注释到地图视图:
func loadObjectsIntoMapView() {
for mapObject in mapObjects {
let temporaryMapAnnotation = IssueLocation(locationName: mapObject.locationName, campusName: "Main Campus", latitude: mapObject.latitude, longitude: mapObject.longitude, coordinate: mapObject.coordinate)
if (temporaryMapAnnotation.longitude < -76.50921821594238) {
temporaryMapAnnotation.campusName = "West Campus"
}
self.mapView.addAnnotation(temporaryMapAnnotation)
}
}
你打电话loadObjectsIntoMapView()?当你派遣到主队列时,你会想在你得到JSON之后这样做吗? – beyowulf
我在viewDidLoad中 –
嘿调用populateMapObjects后立即调用它!有效!操作可能发生在错误的顺序!注释现在出现在地图上。 –