4

在一个应用程序中,我使用ABRecordRef显示联系人的详细信息。我正在使用键kABPersonAddressCityKeykABPersonAddressStateKeykABPersonAddressZIPKeykABPersonAddressCountryKey。一切正常。但我不知道以哪种格式显示地址。我的意思是,如果您看到联系人应用程序,地址会以不同国家的特定格式显示。一些例子,

我们

街道
城市国家邮政编码
国家

印度

街道

城市 PIN
国家

澳大利亚

街道
郊区州邮政编码
国家

现在我不知道如何找到不同国家的格式。

1.有没有办法根据国家/国家代码找到地址格式?
2.有没有一种方法可以使用单个函数获取完全格式化的地址,例如我们使用ABRecordCopyCompositeName()来获取全名?

4

2 回答 2

8

从 iOS 9.0 / macOS 10.11 / watchOS 2.0 开始,您应该使用CNPostalAddressFormatter代替:

CNPostalAddressFormatter 类格式化联系人中的邮政地址。此类处理邮政地址的国际格式。

下面的代码在 Swift 3 中,但将其转换为 Objc 很简单

let postalAddress = CNMutablePostalAddress()
postalAddress.street = street
postalAddress.postalCode = zipCode
postalAddress.city = city
postalAddress.state = state
postalAddress.country = country
postalAddress.isoCountryCode = countryCode

let formattedAddress = CNPostalAddressFormatter.string(from: postalAddress, style: .mailingAddress)

确保您设置了 ISO 国家代码属性,该属性用于确定地址的格式。

例子:

postalAddress.street = "Main Street 1"
postalAddress.postalCode = "67067"
postalAddress.city = "Ludwigshafen"
postalAddress.state = "Rhineland-Palatinate"
postalAddress.country = "Germany"
postalAddress.isoCountryCode = "DE"

导致这个

大街 1 号

67067 路德维希港

德国

然而

postalAddress.isoCountryCode = "US"

导致

大街 1 号

路德维希港莱茵兰-普法尔茨 67067

德国

于 2016-11-15T14:37:10.407 回答
6

试试这个链接 ABCreateStringWithAddressDictionary

看起来您需要使用:ABCreateStringWithAddressDictionary这将返回:

从地址属性返回格式化的地址。(来自苹果)

祝你好运

于 2012-06-25T05:44:45.607 回答