如何将从联系人中提取的iPhone号码与联系人姓名同步



我正在创建一个应用程序,在该应用程序中,我必须获取iPhone的联系人,并使用该应用程序进行调用。

CFErrorRef *error = NULL;
            ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
            CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
            CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);
            for(int i = 0; i < numberOfPeople; i++)
            {
                ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );
                NSString *firstName = (NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
                [TempArray addObject:[NSString stringWithFormat:@"%@",firstName]];
                ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
                for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++)
                {
                    NSString *phoneNumber = (NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);
                    [PhoneNumbers addObject:phoneNumber];
                }
            }

我得到了不同数组中的数字和名称。但有些联系人姓名有多个数字,因此数字数组中的组件更多。

有什么东西可以同时同步号码和联系人吗?有什么东西可以扫描列表中的手机号码和陆地电话号码吗?

此外,在获取联系人时,我们是否可以一次获取朋友的完整姓名,而无需使用kABPersonFirstNameProperty或kABPersonLastNameProperty并附加?

有什么建议吗?

我不得不花一些时间来完成这项工作。我必须使用ABMultiValueCopyLabelAtIndex来获取联系人的类型,并与kABPersonPhoneMobileLabelkABPersonPhoneIPhoneLabel进行比较,并在字典形式中获取联系人的详细信息。在这种形式中,数字与姓名同步。

contactList=[[NSMutableArray alloc] init];
    ABAddressBookRef m_addressbook = ABAddressBookCreate();
    if (!m_addressbook) {
        NSLog(@"opening address book");
    }
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
    CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
    for (int i=0;i < nPeople;i++) { 
        NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary];
        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
        //For username and surname
        ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty);
        CFStringRef firstName, lastName;
        firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
        lastName  = ABRecordCopyValue(ref, kABPersonLastNameProperty);
        [dOfPerson setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"];
        //For Email ids
        ABMutableMultiValueRef eMail  = ABRecordCopyValue(ref, kABPersonEmailProperty);
        if(ABMultiValueGetCount(eMail) > 0) {
            [dOfPerson setObject:(NSString *)ABMultiValueCopyValueAtIndex(eMail, 0) forKey:@"email"];
        }
        //For Phone number
        NSString* mobileLabel;
        for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {
            mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
            if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
            {
                [dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
            }
            else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
            {
                [dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
                break ;
            }
        [contactList addObject:dOfPerson];
    }
    NSLog(@"array is %@",contactList);
    }

最新更新