objective-c - ABAddressBookCopyArrayOfAllPeople 中缺少联系人

标签 objective-c abaddressbook

我试图从我的应用程序的地址簿中查找电话号码,但很惊讶没有找到它。 问题是,我已经在我的应用程序访问的控制台中打印了地址簿的所有号码,奇怪的是,有些联系人丢失了,我正在将输出与我的地址簿进行比较,虽然数量很少,但仍然如此。

这就是我访问地址簿的方式:

 ABAddressBookRef addressBook = ABAddressBookCreate();
 NSArray *people = (NSArray *)   ABAddressBookCopyArrayOfAllPeople(addressBook);

 BOOL found = NO;
 NSString *name;
 int i = 0;
 while (!found) {//Here I print all the contact info, name and phone number
       ABRecordRef person = (ABRecordRef)[people objectAtIndex:i];
       ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
       NSLog(@"el telf: %@ y nombre %@",tempPhone2, [NSString stringWithFormat:@"%@ %@",ABRecordCopyValue(person, kABPersonFirstNameProperty) ? (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) : @"",ABRecordCopyValue(person, kABPersonLastNameProperty) ? (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty) : @""]);                           
      if([[key objectForKey:@"phone"] isEqualToString:tempPhone2]){
           found = YES;          
      }
 }

知道为什么我无法访问地址簿中的所有联系人吗?

[编辑] 最奇怪的是,当我使用 ABPeoplePickerNavigationController 时,那些丢失的联系人就会出现。

最佳答案

请尝试以下操作。

ABAddressBookRef lAddressBook = ABAddressBookCreate();
CFArrayRef lRawAddressBookEntries =
ABAddressBookCopyArrayOfAllPeople(lAddressBook);
CFIndex lTotalContactsCount = ABAddressBookGetPersonCount(lAddressBook);
for (CFIndex i = 0; i < lTotalContactsCount; i++) {
    ABRecordRef lRef = CFArrayGetValueAtIndex(lRawAddressBookEntries, i);

    ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(lRef, kABPersonPhoneProperty);
    NSArray* phoneNumbers1 = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
    CFRelease(phoneNumberProperty);

    // Do whatever you want with the phone numbers
    if(phoneNumbers1 && [phoneNumbers1 isKindOfClass:[NSArray class]]) {
        for(NSString *stringPhoneNUmber in phoneNumbers1) {
            if([stringPhoneNUmber isEqualToString:tempPhone2]){
                found = YES;
            }
        }
    }
}

关于objective-c - ABAddressBookCopyArrayOfAllPeople 中缺少联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581740/

相关文章:

ios - Swift & ObjC 桥 - 找不到 "WKNavigationDelegate"的协议(protocol)声明

objective-c - 绘图的 NSFont 高度

ios - 释放 ABAddressBookRef 时崩溃

objective-c - 从 ABPersonRecord 中提取 'is a company'

iOS 联系人未显示在桌面 View 中

iphone - 如何估计 UITextField 的适当高度,以保存给定字体大小的文本

ios - 错误无法使 UICollectionElementKindCell 类型的 View 出列

Objective-C 每月调用一次方法

ios - whatsapp 如何在 iOS 中更快地从通讯录中获取更新的联系人?

ios - 无法从 iOS6 中的 ABAddressBook 获取 Facebook 配置文件