我发现运行一些代码以在地图视图中显示位置MKMapItem.openInMaps()
仅在 50% 的时间内有效。
事实上,它精确地在MKPlacemark
显示和不显示之间交替。
例如,每第 1、3、5、7...n 次代码运行,就会显示位置标记,但每运行 2、4、6、8...m 次,则不会显示位置标记。
运行下面发布的代码,这是 100% 可重现的。
这似乎是一个错误,但如果是这样,我很惊讶它之前没有被报告或修复。但考虑到失败正是在成功和失败之间交替出现,这让我认为还有其他事情发生,因此我在这里发帖看看是否有人熟悉这个问题,或者有什么应该做的事情缺失了从代码中,或者有一个解决方法:
override func viewDidAppear(_ animated: Bool) {
displayMap()
}
func displayMap()
{
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString("1 Infinite Loop, Cupertino,California") { (placemark: [CLPlacemark]?, error: Error?) -> Void in
if error == nil
{
if let placemark = placemark, placemark.count > 0
{
let location = placemark.first
let latitude = (location?.location?.coordinate.latitude)!
let longitude = (location?.location?.coordinate.longitude)!
let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
let regionDistance:CLLocationDistance = 100000
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [
MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center),
MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span)
]
let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = "Apple"
mapItem.phoneNumber = "(405) 123-4567"
mapItem.openInMaps(launchOptions: options)
}
}
else
{
assert(false, "Unable to geocode")
}
}
}
这是第一次、第三次、第五次、第七次运行代码时的结果
这是代码运行第二次、第四次、第六次、第八次……时的结果
请注意,在失败的屏幕截图中,不仅地标没有显示在地图上,而且向上滑动也是空的。
(目前在 10.2 上观察到这一点,但在其他版本上也看到过)