7

ユーザーがメールアドレス/メッセージメールアドレスの電話番号などの連絡先プロパティを選択できるようにするために、連絡先ピッカービューコントローラーにアクセスする必要があるiOSアプリがあります。

私が今抱えている問題は、返されたデータを解析する方法がわからないことです。メソッドを使用しましたが、contactPicker didSelectContactProperty必要なデータを解析できません。

-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {

   CNLabeledValue *test = contactProperty.contact.emailAddresses.firstObject;
   NSLog(@"%@", test);

   NSLog(@"%@", contactProperty.contact.phoneNumbers);
}

上記のコードを実行すると、次の応答が返されます。

2015-10-11 13:30:07.059 Actions[516:212765] <CNLabeledValue: 0x13656d090: identifier=21F2B1B2-8158-466B-9224-E2036CA07D28, label=_$!<Other>!$_, value=News_Europe@iEUNS.com> 2015-10-11 13:30:07.061 App_Name[516:212765] (
    "<CNLabeledValue: 0x13672a500: identifier=6697A0E9-3B91-4566-B26E-83B87979F816, label=_$!<Main>!$_, value=<CNPhoneNumber: 0x13672a660: countryCode=gb, digits=08000391010>>" )

それは素晴らしいことですが、そこから必要なデータを抽出するにはどうすればよいでしょうか? NSLog ステートメントが奇妙な形式でデータを返すのはなぜですか?

時間をありがとう、ダン。

4

4 に答える 4

15

返される値はCNLabeledValueクラスのものです。それらから値を取得するには、たとえば電子メールについて、これを行います

CNLabeledValue *emailValue = contactProperty.contact.emailAddresses.firstObject;
NSString *emailString = emailValue.value;

電話番号の値が必要な場合は、次の方法で取得します

CNLabeledValue *phoneNumberValue = contactProperty.contact.phoneNumbers.firstObject;
CNPhoneNumber *phoneNumber = phoneNumberValue.value;
NSString *phoneNumberString = phoneNumber.stringValue;

戻り値は であるためCNLabeledValue、電話番号またはメールのラベルを取得することもできます

NSString *emailLabel = emailValue.label; //This may be 'Work', 'Home', etc.
NSString *phoneNumberLabel = phoneNumberValue.label;
于 2015-10-11T12:51:10.637 に答える
1

迅速な 3.0 の場合:

 public func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)
{
      if let emailValue : CNLabeledValue = contact.emailAddresses.first
    {
        txtEmail.text = emailValue.value as String
    }
    if let phoneNumber : CNLabeledValue = contact.phoneNumbers.first
    {
        txtMobno.text = phoneNumber.value.stringValue
    }
     txtFname.text = contact.givenName + " " + contact.familyName

}
于 2016-12-05T12:21:46.900 に答える
0
Here is swift version of Chris answer :

 func fatchContacts(store : CNContactStore)  {
    do
    {
    let groups = try store.groups(matching: nil)
    let predicate =  CNContact.predicateForContactsInGroup(withIdentifier: groups[0].identifier)
    //let predicate = CNContact.predicateForContactsMatchingName("John")
        let keyToFatch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName ) ,CNContactEmailAddressesKey] as [Any]
    let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keyToFatch as! [CNKeyDescriptor])            //------------------------------------------------------
   //-------------Get Here-----------------------------------------
     print(contacts)
     print(contacts[0])
        let formatter = CNContactFormatter ()
        print(formatter.string(from: contacts[0]))
        print(contacts[0].givenName)
        print(contacts[0].emailAddresses)
        let emailValue : CNLabeledValue = contacts[0].emailAddresses.first!;
        let  email = emailValue.value
        print(email)




    }
    catch{

    }
}


Just pass the CNContactStore object        
于 2016-11-25T14:07:47.803 に答える