1

Swift で Map Kit を使用しようとしています。マップ上のエリア、いくつかのピン (MKPointAnnotation)、および現在の位置を表示しようとしました。クラス MKPointAnnotation を拡張することにしました - カテゴリを追加します。

クラス MyAnnotation.swift:

import UIKit
import MapKit

class MyAnnotation: MKPointAnnotation {
var category = Int() 
}

オブジェクトに関する情報を格納するために、タプルの配列を作成しました。ループでは、この配列のすべての要素を処理し、そこから配列を作成しMyAnnotationます。次に、 MyAnnotation を使用して配列全体を表示しようとしますaddAnnotations。ただし、配列の最後の要素のみを表示します....

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

@IBOutlet weak var mainMapView: MKMapView!

var locationManager = CLLocationManager()

var oneAnnotation = MyAnnotation()
var annotationArray = [MyAnnotation]()

var allObjectsTupleArray: [(objLat: CLLocationDegrees, objLong: CLLocationDegrees, objName: String, objDesc: String, objCat: Int)] = 
[(objLat: 53.204526, objLong: 50.111751, objName: "St. George's Church", objDesc: "Church of the Great Martyr St. George", objCat: 1), 
(objLat: 53.19364, objLong: 50.096599, objName: "Heart of Jesus Church", objDesc: "The Roman Catholic Church. Parish of the Sacred Heart of Jesus", objCat: 1), 
(objLat: 53.238906, objLong: 50.183754, objName: "Spiridonievsky Church", objDesc: "Parish of St. Spyridon the Wonderworker", objCat: 1), 
(objLat: 53.248509, objLong: 50.199976, objName: "St. John the Forerunner Church", objDesc: "Parish of of the Prophet and Forerunner St. John", objCat: 1), 
(objLat: 53.231875, objLong: 50.244071, objName: "The Resurrection Cathedral", objDesc: "The Resurrection Cathedral", objCat: 1)]

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()

    var currentLatitude = 53.2393
    var currentLongitude =  50.18145

    var latDelta = 0.05
    var longDelta = 0.05

    var currentLocationSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
    var currentLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(currentLatitude, currentLongitude)
    var currentRegion: MKCoordinateRegion = MKCoordinateRegionMake(currentLocation, currentLocationSpan)
    self.mainMapView.setRegion(currentRegion, animated: true)

    for oneObject in allObjectsTupleArray {

        var oneObjLoc: CLLocationCoordinate2D = CLLocationCoordinate2DMake(oneObject.objLat, oneObject.objLong)
        println("Latitude: \(oneObject.objLat)  Longitude: \(oneObject.objLong)")
        oneAnnotation.coordinate = oneObjLoc

        oneAnnotation.title = oneObject.objName
        println("ObjectName: \(oneObject.objName)")

        oneAnnotation.subtitle = oneObject.objDesc
        println("ObjectDescription: \(oneObject.objDesc)")

        oneAnnotation.category = oneObject.objCat
        println("Category: \(oneObject.objCat)")

        annotationArray.append(oneAnnotation)
    }

    self.mainMapView.addAnnotations(annotationArray)
}
}

self.mainMapView.addAnnotations(annotationArray)配列の内容をチェックする前に挿入しannotationArrayます:

for testVar in annotationArray {
        println("Title of annotation: \(testVar.title)")
} 

このチェックでは、常に同じタイトルが表示されます - 最後のタイトルです! 式annotationArray.append(oneAnnotation)が最後の値の配列を埋めるのはなぜですか? Xcode 6 Beta 5 では+=、配列に対して非推奨です...

私は何を間違っていますか?

4

1 に答える 1