У меня есть контроллер представления, где я пытаюсь получить доступ к адресной книге пользователя на viewDidLoad. Когда пользователь попадает на контроллер представления, я хочу, чтобы всплывающее окно с предупреждением спрашивало его, может ли приложение получить доступ к контактам в их адресной книге, а затем они могли выбрать «ОК» или «Не разрешать».
Что странно, у меня создалось впечатление, что мой код был настроен правильно для этого. Однако всякий раз, когда я запускаю приложение на своем iPhone и посещаю этот контроллер представления, он даже не спрашивает у меня разрешения, а просто автоматически получает доступ к моим контактам. Я даже попытался удалить приложение и все его данные со своего iPhone, а затем повторно запустить его в xcode и на моем iPhone.
Я не уверен, что это сбой, потому что я разработчик, или что-то не так с моим кодом.
Вот код, который я использую для доступа к адресной книге в viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//Asks for access to Address Book.
ABAddressBookRef m_addressbook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookCopyArrayOfAllPeople(m_addressbook);
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@autoreleasepool {
// Write your code here...
// Fetch data from SQLite DB
}
});
ABAddressBookRequestAccessWithCompletion(m_addressbook, ^(bool granted, CFErrorRef error)
{
accessGranted = granted;
NSLog(@"Has access been granted?: %hhd", accessGranted);
NSLog(@"Has there been an error? %@", error);
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else { // we're on iOS 5 or older
accessGranted = YES;
NSLog(@"Address book access has been granted.");
}
if (accessGranted) {
NSArray *allContacts = (__bridge_transfer NSArray
*)ABAddressBookCopyArrayOfAllPeople(m_addressbook);
И затем в основном, если доступ предоставлен, я начинаю загружать все имена и номера телефонов в UITableView контроллера представления.
Мне действительно нужно выяснить, почему это так, и я также хотел бы добавить представление предупреждений, которое спрашивает пользователя, хотят ли они разрешить доступ к контактам адресной книги.
На самом деле он не запрашивает доступ, потому что мой код неправильный? Потому что он знает, что я разработчик? Как я уже сказал, я запускаю это после удаления приложения и всех его данных с моего iPhone.
ОБНОВЛЕНИЕ: я использую iOS 7.0.4, если это имеет значение.