4

アプリでは、ABRecordRefを使用して連絡先の詳細を表示しています。キーkABPersonAddressCityKeykABPersonAddressStateKeykABPersonAddressZIPKeykABPersonAddressCountryKeyを使用しています。すべてが正常に動作します。しかし、アドレスをどの形式で表示するかはわかりません。つまり、連絡先アプリが表示されている場合、住所は国ごとに特定の形式で表示されます。いくつかの例、

私たち

ストリート
シティ州ZIP

インド

ストリート
プロビンス
シティPIN

オーストラリア

ストリート
郊外州ZIP

今、私はさまざまな国のフォーマットを見つける方法がわかりません。

1.国/国コードに基づいて住所形式を見つける方法はありますか?2. ABRecordCopyCompositeName()
を使用してフルネームを取得するように、単一の関数を使用して完全にフォーマットされたアドレスを取得する方法はありますか?

4

2 に答える 2

8

iOS 9.0 / macOS 10.11 / watchOS 2.0以降では、代わりにCNPostalAddressFormatterを使用する必要があります。

CNPostalAddressFormatterクラスは、連絡先の住所をフォーマットします。このクラスは、住所の国際フォーマットを処理します。

以下のコードはSwift3にありますが、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 に答える