0
コアデータモデルからデータを取得してマップに表示したいアプリケーションがあります。注釈をマップビューに追加すると、エラーが発生します。 'Swift._ContiguousArrayStorage <'の値を 'MKAnnotation'()にキャストできませんでした。この同じロジックはSwift 2で動作しましたが、明らかにSwift 3では動作しませんでした。どこでどのように表記法をマップビューに追加しますか?コードは次のとおりです。マップビューに注釈を追加する際にエラーが発生する
var gauges = [Gauges]()
と注釈に関連する情報を保持するクラスゲージを作成しました:
override func viewDidAppear(_ animated: Bool) {
var rainFallGauges = [RainFallGauge]()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "RainFallGauge")
do {
rainFallGauges = try coreDataStack.context.fetch(fetchRequest) as! [RainFallGauge]
obsCount = rainFallGauges.count
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
if obsCount == 0 {
let alert = UIAlertController(title: "Sorry", message: "No gauges found", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
} else {
for rainFallGauge in rainFallGauges {
resultsGauge = rainFallGauge.value(forKey: "gaugeName") as? String
resultsLatitude = rainFallGauge.value(forKey: "gaugeLatitude") as? String
resultsLongitude = rainFallGauge.value(forKey: "gaugeLongitude") as? String
print(resultsGauge)
if (resultsLatitude != nil && resultsLongitude != nil) && (resultsLatitude?.isEmpty == false && resultsLongitude?.isEmpty == false) {
let latNSString = NSString(string: resultsLatitude!)
setLatitude = latNSString.doubleValue
print(setLatitude)
let longNSString = NSString(string: resultsLongitude!)
setLongitude = longNSString.doubleValue
print(setLongitude)
self.gauges.append(Gauges(gaugeTitle: resultsGauge, latitude: setLatitude, longitude: setLongitude))
print(gauges.count)
} else if gauges.count == 0 {
let alert = UIAlertController(title: "Sorry", message: "No gauges", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}
self.gaugeMap.delegate = self
self.gaugeMap.addAnnotation(self.gauges as! MKAnnotation)
gaugeMap.mapType = .hybrid
let rectToDisplay = self.gauges.reduce(MKMapRectNull) {
(mapRect: MKMapRect, gauge: Gauges) -> MKMapRect in
let placePointRect = MKMapRect(origin: gauge.location.mapPoint, size: MKMapSize(width: 0, height: 0))
return MKMapRectUnion(mapRect, placePointRect)
}
私は、アレイ「ゲージ」として上で宣言されています。
addAnnotationステートメントの正しい構文と、どこに行かなければならないのかを教えてください。
この行は意味をなさない:
が、私は単純化しに行くことによって私の問題を解決しましたself.gauges as!MKAnnotation) 'もし' self.gauges'が '' Gauges ''ならば、どうすればMKAnnotationですか?スウィフト2で何とか働いたことを教えてください。あなたが話している言語が何であれ、それはナンセンスです。 – matt
はMKAnnotationのGaugesサブクラスですか? –
あなたの貴重な洞察をいただきありがとうございます、私はそれが実際にあった私の古いアプリのラインを誤解しました: – user1698875