ios - 如何简单地检索 iOS7 中的联系人列表?

标签 ios addressbook

我需要在 iOS 中检索 Contacts 列表。

这是我的代码,但不起作用。

NSMutableArray *myContacts = [[NSMutableArray alloc]init];

    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    if (addressBook!=nil)
    {
        NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

        NSUInteger i = 0;
        for (i = 0; i<[allContacts count]; i++)
        {
            Person *person = [[Person alloc] init];
            ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
            NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

            person.firstName = firstName;
            [myContacts addObject:person];
        }
        CFRelease(addressBook);

    }
    else
    {
        NSLog(@"Error");

    }

如何获取联系人的列表?

最佳答案

您需要先请求访问用户的地址簿。设置标志以检查用户是否允许/拒绝访问。

__block BOOL userDidGrantAddressBookAccess;
CFErrorRef addressBookError = NULL;

if ( ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined ||
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized )
{
    addressBook = ABAddressBookCreateWithOptions(NULL, &addressBookError);
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error){
        userDidGrantAddressBookAccess = granted;
        dispatch_semaphore_signal(sema);
    });
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else
{
    if ( ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied ||
        ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted )
    {
        // Display an error.
    }
}

然后您可以调用您编写的方法来获取联系人。请记住首先检查 userDidGrantAddressBookAccess 的值。

关于ios - 如何简单地检索 iOS7 中的联系人列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655156/

相关文章:

ios - 在 DetailViewController 中将 JSON 字符串转换为 NSDictionary

ios - CocoaPods 单元测试问题

iOS 8 滚动指示器未显示在 ScrollView 中

ios - 断开连接时右 View 生命周期

sorting - Swift AddressBook - 复制源中的所有人员,但存在排序问题

ios - 在 Swift 中获取多个触摸的坐标

ios - 如何转换非托管<AnyObject>!串起来

java - 如何在不使用位置的情况下获取设备的区号

ios - 在 ios 上从电话簿导入联系人时过滤 truecaller 垃圾邮件联系人(保存名称 "Identified as Spam")

ios - cocoa - 获取 iphone 地址组