如何简单地检索iOS7中的联系人列表?
我需要在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"); }
我如何获得Contacts
列表?
您需要先请求访问用户的地址簿。 设置一个标志来检查用户是否允许/拒绝访问。
__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
的值。