Обновленный учебник Ray Wenderlich MapKit до XCode 7 ошибка mkplacemark
Я только что обновил учебник Ray Wenderlich MapKit до ошибки XCode 7 для MKPlacemark. Я все еще только начинаю с кодированием, и я не уверен на 100%, с чего начать, как исправить эту ошибку. Я искал, но узнать безрезультатно.
Спасибо за любую помощь. Это высоко ценится.
http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial
Это код, с которым я получаю сообщение об ошибке:
// annotation callout opens this mapItem in Maps app
func mapItem() -> MKMapItem {
let addressDict = [String(kABPersonAddressStreetKey): self.subtitle]
let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = self.title
return mapItem
Ошибка:
Невозможно вызвать инициализатор для типа "mkplacemark" с аргументом типа списка "координата:CLLocationCoordinate2D, addressDictionary:[String: String?])"
Еще раз спасибо,
Travis.
2 ответа
Вам нужно привести ваш субтитр как AnyObject, как показано ниже:
let addressDict = [String (kABPersonAddressStreetKey): self.subtitle as! AnyObject]
и ваш полный код для "func mapItem() -> MKMapItem { }" будет:
func mapItem() -> MKMapItem {
let addressDict = [String(kABPersonAddressStreetKey): self.subtitle as! AnyObject]
let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = self.title
return mapItem
}
ХОРОШО!
Просто понял, что я искал глубже!
Проблема заключается в том, что locationName является необязательным, поэтому атрибут addressDictionary имеет тип [String:String?], Который несовместим с инициализатором. Но словарь типа [String:String] будет работать.
Таким образом, вы можете заменить эту строку:
let addressDictionary = [String(CNPostalAddressStreetKey): subtitle]
С этим:
let addressDictionary = [String(CNPostalAddressStreetKey): subtitle!]
Или это (что эквивалентно с учетом реализации субтитров):
let addressDictionary = [String(CNPostalAddressStreetKey): locationName]
Спасибо!!!