【问题标题】:Contact address format for different countries不同国家的联系地址格式
【发布时间】:2012-06-21 09:11:35
【问题描述】:

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

美国

街道
城邦邮编
国家

印度

街道

城市密码
国家

澳大利亚

街道
郊区州邮编
国家

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

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

【问题讨论】:

  • 天啊!为什么你们在我提供赏金之前没有告诉我这个?
  • 因为赏金是多汁的 O_O,我还没有看到你的问题。你知道你可以准确地输入你的问题标题并遇到这个吗?哈哈
  • 路易斯·奥斯卡,;-) 我完全同意你的看法。谢谢大佬!

标签: ios iphone objective-c ipad


【解决方案1】:

从 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

德国

【讨论】:

    【解决方案2】:

    试试这个链接 ABCreateStringWithAddressDictionary

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

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

    祝你好运

    【讨论】:

    • 不客气,我刚刚完成了一个通讯录应用程序,我不得不说 AdreesBook 文档真的很糟糕。
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2018-08-20
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2015-09-30
    • 2013-01-06
    相关资源
    最近更新 更多