ANCS外部デバイスで動作するアプリケーションで作業しています。物事を短くするために、デバイスはSMSがいつ来るのかを検出し、それをアプリに伝えます。その後、アプリケーションはWebサービス(Twilio)を介してSMS送信者にメッセージを送り返すことができます。CNContactStore NSPredicateが1つの文字列内に2つの連絡先名を指定しました
SMSを送信した人が連絡先にいる場合、ANCSデバイスは電話番号自体ではなく、この連絡先の名前だけを表示します。したがって、この読み込み可能な名前だけがAppに提供されます。 のみ1名が接触のために存在する場合(例:「ジョン」):のために保存
let title = "John"
let contactStore = CNContactStore()
let predicate = CNContact.predicateForContacts(matchingName: title)
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactNicknameKey, CNContactOrganizationNameKey, CNContactPhoneNumbersKey]
var contacts = [CNContact]()
do {
contacts = try contactStore.unifiedContacts(matching: predicate, keysToFetch: keys as [CNKeyDescriptor])
if contacts.count == 0 {
print("No contacts were found matching the given name.")
}
else
{
print("found \(contacts.count) matches !")
// from there find the best possible bet and the numbers for this contact
}
} catch {
print("Unable to fetch contacts.")
}
しかし、時には人々が持っているいくつかの連絡先、連絡先とその電話番号を検索すると、非常に簡単そうに似ています同じ名前の人がいます。例えば、SMSが来たときに、「John or Dad」から来ていると言うことができます。それはアドレス帳の2人の連絡先に対応しているからです。アドレス帳に重複しています)。そして、最悪の場合には、3つ以上の名前があることがあります!
ここで私がやりたいことがあります。どのようにしてこれらの連絡先を確認するための述語を区別/作成できますか?簡単な解決策は、 "or"という単語の名前を分割することですが、これがコリアン語、ドイツ語、スウェーデン語などの場合はどうなりますか?そして、もしこの言葉が名前がひとつの連絡先に属していたら、「John desk on the roof」と言いましょうか?最悪の場合、iOSはローカライズされた区切り文字 "or"を提供しますか?
誰もこのような問題に直面しましたか?
ちょっと、私はちょっと同じ問題がありますが、自分のカスタム連絡先UIを構築しようとしています。セクションごとに連絡先の配列を取得したいつまり、セクションA、B、Cなどのすべての連絡先を取得します。私はそれらをテーブルビューに表示しようとしていますが、私はASCIIとASCII以外の文字と異なる言語をすべて考慮する必要があるという事実のために複雑です!したがって、リスト全体ではなくセクションで簡単に取得する方が簡単ですが –