When you first create the address book, if you end up in the completion handler after requesting access, you need to update your address book reference.
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (granted && !error) {
ABAddressBookRevert(addressBook);
[self addContactsIntoTableData:addressBook];
}
});
});
} else if(ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){
[self addContactsIntoTableData:addressBook];
}
Also keep in mind that you are calling reloadData
long before the user allows access to the contacts.