1

私は、ビッグ ナード ブランチの「iOS プログラミング 第 5 版」という本を読んでいます。

このコードは、マップ ビューでセグメント化されたビューを作成し、実行時にセグメントを変更するたびに、次のようにクラッシュします。

スレッド 1: シグナル SIGABRT

最新バージョンを使用している間に、本の古いバージョンのSwiftに関係している可能性があります。

これが私のコードです:

class MapViewController: UIViewController
{
var mapView: MKMapView!

override func loadView()
{
    //Create a map view
    mapView = MKMapView ()

    //Set it as *the* view of this view controller
    view = mapView

    let segmentedControl = UISegmentedControl (items: ["Standard", "Hybrid", "Satelite"])
    segmentedControl.backgroundColor = UIColor.white.withAlphaComponent (0.5)
    segmentedControl.selectedSegmentIndex = 0

    segmentedControl.addTarget(self, action: Selector(("mapTypeChanged:")), for: .valueChanged)

    segmentedControl.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(segmentedControl)

    let topConstraint = segmentedControl.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor , constant: 8)
    let margins = view.layoutMarginsGuide
    let leadingConstraint = segmentedControl.leadingAnchor.constraint(equalTo: margins.leadingAnchor)
    let trailingConstraint = segmentedControl.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
    topConstraint.isActive = true
    leadingConstraint.isActive = true
    trailingConstraint.isActive = true


}


func mapTypeChanged (segControl: UISegmentedControl)
{
    switch segControl.selectedSegmentIndex {
    case 0:
        mapView.mapType = .standard
    case 1:
        mapView.mapType = .hybrid
    case 2:
        mapView.mapType = .satellite
    default:
        break
    }
}


override func viewDidLoad()
{
    // Always call the super implementation of ViewDidLoad
    super.viewDidLoad()
    print ("MapViewController loaded its view")
}



}

これを修正するにはどうすればよいですか?

4

1 に答える 1