2015-07-03 5 views
2

Я доступ ABAddressBook используя следующий код:Ошибка при доступе к ABAddressBook

+ (void)connectToAddressBook { 
    if(!_addressBook) 
    { 
     CFErrorRef error; 
     _addressBook = ABAddressBookCreateWithOptions(NULL, &error); 
     NSLog(@"Address book %@", _addressBook); 

     if (error != nil) { 
      NSLog(@"ERROR WHILE ACCESSING ADDRESS BOOK: %@", CFBridgingRelease(error)); 
      CFRelease(error); 
     } 

     if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
      ABAddressBookRequestAccessWithCompletion(_addressBook, ^(bool granted, CFErrorRef error) { 
       _isAccessToContactsAllowed = granted; 
      }); 
     } 
     else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
      _isAccessToContactsAllowed = YES; 
     } 
     else { 
      _isAccessToContactsAllowed = NO; 
     } 
    } 
} 

Адресной книга открывается нормально, но по какой-то ошибке Причины не ноль и регистрирует имя текущего класса:

ERROR WHILE ACCESSING ADDRESS BOOK: MyContactManager 

Почему ошибка не ноль? Мой код как-то не так? Как я могу обнаружить и перестать пытаться получить доступ к адресной книге в случае реальной ошибки?

+0

Проверьте, что ошибка говорит то? – Artrmz

+2

http://stackoverflow.com/questions/19724995/my-contact-not-add-in-addressbook-in-ios-7 – ilesh

+0

@Ilesh - спасибо, * ошибка работает. Странно, однако. Так оно и было в начале, но оно сильно ломалось, поэтому мне пришлось переписать его (произошла ошибка, и отладчик застрял при попытке зарегистрировать его). – puzzler

ответ

1

Вот мой Неподвижные метод благодаря обратной связи от Ilesh:

+ (void)connectToAddressBook { 
    if(!_addressBook) { 
     CFErrorRef *error = nil; 
     _addressBook = ABAddressBookCreateWithOptions(NULL, error); 

     // To test if error is not nil: 
     //error = CFErrorCreate(NULL, CFSTR("Hello, world."), 111, NULL); 

     if (error != nil) { 
      NSLog(@"ERROR WHILE ACCESSING ADDRESS BOOK: %@", CFBridgingRelease(error)); 
      CFRelease(error); 
     } 
     else { 
      if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
       ABAddressBookRequestAccessWithCompletion(_addressBook, ^(bool granted, CFErrorRef error) { 
        _isAccessToContactsAllowed = granted; 
       }); 
      } 
      else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
       _isAccessToContactsAllowed = YES; 
      } 
      else { 
       _isAccessToContactsAllowed = NO; 
      } 
     } 
    } 
} 

Edit:

Оказывается, что моя первая ошибка была не присваивая ошибку ноль. Создание адресной книги не устанавливает ошибку , если на самом деле не существует ошибки. Поэтому моя неназначенная переменная указывала на случайное место в памяти, и поэтому у меня были случайные ошибки с моей первой попытки.

Более того, ABAddressBookCreateWithOptions вернет ноль если есть ошибка, так что правильный способ сделать это:

if(_addressBook) { 
    // do something 
} 
else { 
    // there is an error 
} 
0

Заменить весь свой код на этот

+ (void)connectToAddressBook { 
    if(!_addressBook) 
    { 
_addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
     ABAddressBookRequestAccessWithCompletion(addressBook, 
               ^(bool granted, CFErrorRef error) { 
                if (granted) 
                 dispatch_async(dispatch_get_main_queue(), ^{ 
                 _isAccessToContactsAllowed = granted; 
                }); 

                 }); 


    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
_isAccessToContactsAllowed = YES; 

    }); 
    } 
    else { 
     UIAlertView *alert=[[UIAlertView alloc] initWithTitle:Nil message:@"You don't have permission of access contacts for access go to Setting-" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
    } 
}} 
+0

Спасибо, но я хочу знать, есть ли ошибка при попытке создать адресную книгу. – puzzler

 Смежные вопросы

  • Нет связанных вопросов^_^