iOS CoreLocation地理编码器崩溃

时间:2016-01-21 21:53:59

标签: ios swift crash

我遇到了100%可重现的崩溃,但我想知道它是否是因为不正确使用CoreLocation,或者我可以安全地将其归咎于库。问题出在CoreLocation中,可以在Swift Playground中的XCode7.2中重现。

代码尝试执行的操作是使用反向地理位置将邮政编码映射到城市名称。

import UIKit
import CoreLocation
import AddressBookUI
import XCPlayground

let geocoder: CLGeocoder = CLGeocoder()
var addressDict: [String : String] = [:]

// Change to a valid zipcode to see it not crash
addressDict[kABPersonAddressZIPKey as String] = "1010"

geocoder.geocodeAddressDictionary(addressDict) { (returnedPlacemarks, error) -> Void in
  if returnedPlacemarks != nil && returnedPlacemarks!.count > 0 && error == nil {
    if let city: String = returnedPlacemarks![0].addressDictionary![kABPersonAddressCityKey as String] as? String {
      print(city)
    }
  } else {
    if error != nil {
      print("Failed to match city")
    }
  }
}

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

问题是输入1010作为邮政编码会导致崩溃。如果您尝试使用有效的邮政编码,它将表现正常。

在实际项目中,它在CoreFoundation中崩溃,输出如下

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 4 beyond bounds [0 .. 3]'

这是堆栈跟踪的前三行

0   CoreFoundation                      0x000000010bee2e65 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x000000010dc22deb objc_exception_throw + 48
2   CoreFoundation                      0x000000010bdc6404 -[__NSArrayM objectAtIndex:] + 212

有没有人发现我的代码存在任何问题,或者我应该向Apple提交错误报告?感谢

0 个答案:

没有答案