详解iOS获取通讯录的4种方式

2020-01-18 16:42:26王振洲

4. 运行结果

iOS获取通讯录,iOS通讯录的获取

iOS获取通讯录,iOS通讯录的获取

第三方框架:RHAddressBook

https://www.easck.com/p>

iOS获取通讯录,iOS通讯录的获取

2.添加Target Dependencies和Link Binary With Libraries

iOS获取通讯录,iOS通讯录的获取

3.Build Settings—> Other Linker Flags : -ObjC

用于解决系统分类找不到方法的错误

iOS获取通讯录,iOS通讯录的获取

4.iOS10 需要在Info.plist配置NSContactsUsageDescription


<key>NSContactsUsageDescription</key>
<string>请求访问通讯录</string>  

App启动时请求授权访问通讯录


#import "AppDelegate.h"
#import <RHAddressBook/RHAddressBook.h>

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Override point for customization after application launch.

  [self requestAuthorizationForAddressBook];
  return YES;
}

- (void)requestAuthorizationForAddressBook {
  RHAddressBook *ab = [[RHAddressBook alloc] init];
  if ([RHAddressBook authorizationStatus] == RHAuthorizationStatusNotDetermined){

    [ab requestAuthorizationWithCompletion:^(bool granted, NSError *error) {
      if (granted) {

      } else {
        NSLog(@"请求授权拒绝");
      }
    }];
  }
}
@end

获取所有联系人的信息:姓名、手机号等


#import "ViewController.h"
#import <RHAddressBook/RHAddressBook.h>
#import <RHAddressBook/AddressBook.h>

@interface ViewController ()

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  RHAddressBook *addressBook = [[RHAddressBook alloc] init];
  if ([RHAddressBook authorizationStatus] != RHAuthorizationStatusAuthorized){
    NSLog(@"没有授权");
    return;
  }

  NSArray *peopleArray= addressBook.people;
  for (int i = 0; i < peopleArray.count; i++) {
    RHPerson *people = (RHPerson *)peopleArray[i];
    NSLog(@"%@", people.name);

    RHMultiStringValue *phoneNumbers = people.phoneNumbers;
    for (int i = 0; i < phoneNumbers.count; i++) {
      NSString* label= [phoneNumbers labelAtIndex:i];
      NSString* value= [phoneNumbers valueAtIndex:i];

      NSLog(@"label=%@, value=%@", label, value);
    }

    NSLog(@"----------------------------------------------");
  }
}
@end