"kABPersonAddressStreetKey" устарел в iOS 9.0: используйте CNPostalAddress.street
У меня есть следующий класс, написанный в более ранней версии Swift. Компилятор Swift 2 предупреждает, что
' kABPersonAddressStreetKey' устарел в iOS 9.0: используйте CNPostalAddress.street
и дает ошибку
'Невозможно найти инициализатор для типа "MKPlacemark", который принимает список аргументов типа '(координата: CLLocationCoordinate2D, addressDictionary: [String: String?]) '
Я понимаю, что для устранения ошибки необходимы дополнительные опции, но все, что я пытаюсь, похоже, не решает проблему. Это связано с тем, что я был новичком, и любая помощь была бы оценена.
import Foundation
import MapKit
import AddressBook
class Artwork: NSObject, MKAnnotation {
let title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
var subtitle: String? {
return locationName
}
// annotation callout info button opens this mapItem in Maps app
func mapItem() -> MKMapItem {
let addressDictionary = [String(kABPersonAddressStreetKey): subtitle]
let placemark = MKPlacemark(coordinate: coordinate, addressDictionary: addressDictionary)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = title
return mapItem
}
}
Ответы
Ответ 1
Замените import AddressBook
на import Contacts
, а также замените String(kABPersonAddressStreetKey)
на String(CNPostalAddressStreetKey)
import Foundation
import MapKit
import Contacts
class Artwork: NSObject, MKAnnotation {
let title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
var subtitle: String? {
return locationName
}
// annotation callout info button opens this mapItem in Maps app
func mapItem() -> MKMapItem {
let addressDictionary = [String(CNPostalAddressStreetKey): self.subtitle!]
let placemark = MKPlacemark(coordinate: coordinate, addressDictionary: addressDictionary)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = title
return mapItem
}
Ответ 2
Вы должны использовать:
-
import Contacts
вместо import AddressBook
.
-
CNPostalAddressStreetKey
вместо kABPersonAddressStreetKey
.
Ответ 3
Подал на него радар. Получил этот ответ сегодня:
Инженерия предоставила следующую информацию по этому вопросу: Пожалуйста, знайте, что вы должны продолжать использовать устаревшие ключи.
Ответ 4
Вам нужно передать свои субтитры как 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
}