在应用中,我使用 ABRecordRef 显示联系人的详细信息。我使用的密钥 kABPersonAddressCityKey , kABPersonAddressStateKey , kABPersonAddressZIPKey , kABPersonAddressCountryKey 。一切正常。但我不知道以哪种格式显示地址。我的意思是,如果您看到 通讯录应用 ,则地址会以不同国家/地区的特定格式显示。一些例子,
US
街
城邦ZIP 国家
印度
街
省
城市PIN
国家
澳大利亚
街
郊区州ZIP 国家
现在我不知道如何找到不同国家的格式。
1.有没有办法根据国家/地区代码找到地址格式?
2.有没有办法可以使用单个函数获取完全格式化的地址,比如我们使用 ABRecordCopyCompositeName()来获取全名?
答案 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
德国