私は、ビッグ ナード ブランチの「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")
}
}
これを修正するにはどうすればよいですか?