事象
地図にアノテーションを表示すると、ビルド、実行はできるが、実行中にエラーが発生して停止してしまう。
MKMarkerAnnotationViewで、クラスタリングやglyphimageの表示を行っている。
アノテーションは100個程度で、Viewのロード時にFirestoreから取得して配列に格納している。
エラーは、地図の拡大や移動時に発生している。
Swift version: Swift5
outlet接続も確認したが問題なさそうに見えます。
解決策が見出せず、、何が問題なのか教えていただけないでしょうか。
Mapの設定方法等については色々調べながら書いたのですが、根本的に間違っていたらご教授いただけると大変ありがたいです。
エラー
[XXX.CustomePinAnnotation memberAnnotations]: unrecognized selector sent to instance 0x2835e16c0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[XXX.CustomePinAnnotation memberAnnotations]: unrecognized selector sent to instance 0x2835e16c0'
*** First throw call stack:
CustomePinAnnotation.swift
Swift
1import UIKit 2import MapKit 3 4class CustomePinAnnotation: NSObject, MKAnnotation { 5 let clusteringIdentifier : String 6 let title: String? 7 let subtitle: String? 8 let coordinate: CLLocationCoordinate2D 9 //let glyphText: String 10 let glyphImage: UIImage 11 let glyphTintColor: UIColor 12 let markerTintColor: UIColor 13 let objectid: Int 14 init(_ clusteringIdentifier: String, title: String, subtitle: String, coordinate: CLLocationCoordinate2D, glyphImage: UIImage, glyphTintColor: UIColor = .white, markerTintColor: UIColor, objectid: Int) { 15 self.clusteringIdentifier = clusteringIdentifier 16 self.title = title 17 self.subtitle = subtitle 18 self.coordinate = coordinate 19// self.glyphText = glyphText 20 self.glyphImage = glyphImage 21 self.glyphTintColor = glyphTintColor 22 self.markerTintColor = markerTintColor 23 self.objectid = objectid 24 } 25}
ViewController.swift
import UIKit import MapKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { var locationManager = CLLocationManager() var userCoordinate = CLLocationCoordinate2D() //object配列 var objectAll = [objectData]() // マップビュー @IBOutlet weak var mapView: MKMapView! func displayAllMountains() { for mountain in objectAll { // カスタムクラスで、ピンの初期設定をする let pinImage = UIImage.init(named: "XXXXX")! let subtitletext = String(object.height) + "m" let annotation = YamaPinAnnotation("clusterid", title:object.name, subtitle: subtitletext, coordinate: object.geopoint, glyphImage: pinImage, glyphTintColor: .white, markerTintColor: .darkGray, objectid: object.objectid) self.mapView.addAnnotation(annotation) } } //addAnnotation時呼ばれるデリゲートメソッド func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { if annotation === mapView.userLocation { // 現在地を示すアノテーションの場合はデフォルトのまま return nil } else { let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier, for: annotation) guard let markerAnnotationView = annotationView as? MKMarkerAnnotationView, let annotation = annotation as? YamaPinAnnotation else { return annotationView } markerAnnotationView.clusteringIdentifier = annotation.clusteringIdentifier // markerAnnotationView.glyphText = annotation.glyphText markerAnnotationView.glyphImage = annotation.glyphImage markerAnnotationView.glyphTintColor = annotation.glyphTintColor markerAnnotationView.markerTintColor = annotation.markerTintColor return markerAnnotationView } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。