不同国家/地区的联系地址格式

时间:2012-06-21 09:11:35

标签: ios iphone objective-c ipad

在应用中,我使用 ABRecordRef 显示联系人的详细信息。我使用的密钥 kABPersonAddressCityKey kABPersonAddressStateKey kABPersonAddressZIPKey kABPersonAddressCountryKey 。一切正常。但我不知道以哪种格式显示地址。我的意思是,如果您看到 通讯录应用 ,则地址会以不同国家/地区的特定格式显示。一些例子,

US

  


  城邦ZIP   国家

印度

  


  省
  城市PIN
  国家

澳大利亚

  


  郊区州ZIP   国家

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

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

2 个答案:

答案 0 :(得分:6)

试试此链接 ABCreateStringWithAddressDictionary

您似乎需要使用:ABCreateStringWithAddressDictionary将返回:

  

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

祝你好运

答案 1 :(得分:4)

从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"

导致这个

  

Main Street 1

     

67067 Ludwigshafen

     

德国

,而

postalAddress.isoCountryCode = "US"

导致

  

Main Street 1

     

Ludwigshafen Rhineland-Palatinate 67067

     

德国