2016-09-21 2 views
0

Это приложение потерпело крах, поскольку оно попыталось получить доступ к конфиденциальным данным без описания использования. Info.plist приложения должен содержать ключ NSContactsUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.Как разрешить доступ к адресной книге телефона в ios 10.0?

Я добавил к .plist NSContactsUsageDescription

не работает - версия устройства: 10,0

KTSContactsManager *addressBookManager = [KTSContactsManager sharedManager]; 
addressBookManager.delegate = self; 
addressBookManager.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]]; 

if ([isAddressBookTaken isEqualToString:@"false"]) { 
    [addressBookManager importContacts:^(NSArray *contacts) { 
     [EBLogger logWithTag:@"TBLContactManager" withBody:@"importContacts"]; 

     DLPhoneBook *phoneBook = [DLPhoneBook new]; 
     NSMutableArray *mutableArray = [NSMutableArray new]; 

     for (int i = 0; i < contacts.count; ++i) { 
      NSDictionary *record = [contacts objectAtIndex:i]; 
      NSError *err = nil; 
      DLContactRecord *contactRecord = [[DLContactRecord alloc] initWithDictionary:record error:&err]; 

      NSLog(@" %@ %@ %@ '",contactRecord.firstName, contactRecord.lastName, contactRecord.id); 
     } 
    } 

ответ

0

Вы должны добавить список информации в вашем PLIST,

information plist

Информационная страница n plist для различной конфиденциальности.

Добавить конфиденциальность, которую вы хотите, и повторите попытку.

и добавьте этот код в файле,

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    contactList=[[NSMutableArray alloc] init]; 
    ABAddressBookRef m_addressbook = ABAddressBookCreate(); 

    if (!m_addressbook) { 
     NSLog(@"opening address book"); 
    } 

    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); 
    CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); 

    for (int i=0;i &lt; nPeople;i++) { 
     NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary]; 

     ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 

     //For username and surname 
     ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty); 
     CFStringRef firstName, lastName; 
     firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
     lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
     [dOfPerson setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"]; 

     //For Email ids 
     ABMutableMultiValueRef eMail = ABRecordCopyValue(ref, kABPersonEmailProperty); 
     if(ABMultiValueGetCount(eMail) &gt; 0) { 
      [dOfPerson setObject:(NSString *)ABMultiValueCopyValueAtIndex(eMail, 0) forKey:@"email"]; 

     } 

     //For Phone number 
     NSString* mobileLabel; 
     for(CFIndex i = 0; i &lt; ABMultiValueGetCount(phones); i++) { 
      mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i); 
      if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) 
      { 
       [dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"]; 
      } 
      else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) 
      { 
       [dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"]; 
       break ; 
      } 

     [contactList addObject:dOfPerson]; 
     CFRelease(ref); 
     CFRelease(firstName); 
     CFRelease(lastName); 
    } 
    NSLog(@"array is %@",contactList); 
    } 
} 

Более подробной информации о его посетить,

http://sugartin.info/2011/09/07/get-information-from-iphone-address-book-in-contacts/

Надеется, что это поможет.

+0

Hi @KAR благодарит за ваш ответ, я сделал то, что вы объяснили, но я продолжаю получать ту же ошибку. Я также удаляю приложение и файл данных. – user3172307

+0

проверить эту ссылку, если она вам полезна, https://forums.developer.apple.com/thread/62229 – KAR

+0

+ Настройки> MyApp> «Контакты» не появляется! – user3172307

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