和相册 备份一样,公司产品备份功能有通讯录备份 功能,自然也有通讯录恢复了。iOS通讯录相关操作,iOS对通讯录的操作离不开的框架:
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
iOS提供给我们了通讯录的相关信息,也给我们提供了简单的通讯录的控制器、UI,但是可定制的部分较少,一般不用他的UI,我们就不多讲他提供的UI部分。(大概也就能改个颜色,组件 什么的,导航栏颜色等)。
说道通讯录的使用,我们还是先来说权限的问题,iOS7之前这些是不需要申请用户权限的,但是iOS7之后,苹果开始注重用户的隐私。如:相册,通讯录,地理位置等信息都是需要得到用户的许可的。
首先要申请用户权限。
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor colorWithRed:248.0/255.0 green:248.0/255.0 blue:248.0/255.0 alpha:1.0];
self.title=@"通讯录同步";
[self initView];
[self addRightBarItem];
CFErrorRef error=NULL;
//请求权限
ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
});
if (error==NULL) {
CFRelease(addressBook);
}
}
获得用户权限后,才能对AddressBook做相关操作。
但是要注意的是,即使获得了权限,用户还可以在设置中把咱们的权限关掉。所以每次对AddressBook的操作前要检查下权限是否正常。
//检测授权状态
+(BOOL)checkAuthorizationStatus{
if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
return NO;
}else{
return YES;
}
}
接下来 获得所有的通讯录数据
-(NSMutableArray *)getLocationAllPeople{
[self.allPeople removeAllObjects];
if (![JYAddressBookSyncManager checkAuthorizationStatus]) {
return self.allPeople;
}else{
if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
}else{
}
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(addressBook);
for (int i = 0; i<CFArrayGetCount(results); i++) {
ABRecordRef person = CFArrayGetValueAtIndex(results, i);
Person * people = [[Person alloc]init];
people.id = ABRecordGetRecordID(person);
people.first_name = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));