为什么我的注释没有出现在我的地图视图中?

我创build了一套“IssueLocation”,这是一个符合MKAnnotation协议的类。 为什么我的注释(从API JSON数据构build)没有出现在我的地图视图中?

这里是所有背后的代码:

class级代码:

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 } } 

创build一组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()移到这个块中:

 dispatch_async(dispatch_get_main_queue()) { self.loadingIndicator.stopAnimating() self.populatingMapObjects = false print(self.mapObjects.count) } 

调用viewDidLoad中的loadObjectsIntoMapView()会立即执行,并且数据还没有从服务器上下来,所以在mapObjects中没有mapObject,因此没有注释。