ios - 如何将从联系人中获取的 iPhone 号码与联系人姓名同步?

标签 ios iphone call contacts

我正在创建一个应用程序,我必须在其中获取 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];
                }
            }

我在不同的数组中获取号码和姓名。但是有些联系人姓名包含多个号码,因此号码数组中的组件会更多。

有什么东西可以同时同步号码和联系人吗? 我们可以用什么东西来扫描该列表中的手机号码和固定电话号码吗?

此外,在获取联系人时,我们可以立即获取 friend 的全名,而不使用 kABPersonFirstNameProperty 或 kABPersonLastNameProperty 并附加吗?

有什么建议吗?

最佳答案

我必须花一些时间才能完成此任务。我必须使用 ABMultiValueCopyLabelAtIndex 来获取联系人类型,并与 kABPersonPhoneMobileLabel 进行比较kABPersonPhoneIPhoneLabel 并以字典形式获取联系人详细信息。在此形式中,号码与姓名同步

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);
    }

关于ios - 如何将从联系人中获取的 iPhone 号码与联系人姓名同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20260125/

相关文章:

ios - Xcode 中的按钮不会更改变量 - Swift

iphone - 想要使用没有 OAuth 身份验证的 API

android - GetTY allState 始终返回空闲状态

javascript - Backbone Jquery Click 在 iOS 上出现巨大延迟

ios - 计算 UIBezierPath 曲线控制点

iphone - 为什么不使用 self 。类内调用

javascript - iphone/ipad 触发意外的调整大小事件

javascript - 如何使用 call 或 apply 调用 javascript 构造函数?

java - 如果在 Eclipse 中调用 "Open Call Hierarchy"仅返回运行检查的方法,这意味着什么?

ios - 应用版本重复