2016-09-04 2 views
1

Я начинаю работать с ABAddress Book и используя очень простую отправную точку ... Я хочу получить все записи в своей адресной книге и поместить их в массив. Он продолжает показывать 0 элементов.ABAddressBookCopyArrayOfAllPeople Не возвращает никаких людей

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 

не на самом деле ABAddressBookCopyArrayOfAllPeople получить все люди из вашего списка контактов или же я что-то неправильно.

ПРИМЕЧАНИЕ ДЛЯ ADMIN's Мой вопрос был связан с объектом C, а не для SWIFT, поэтому этот ответ не применяется. В рекомендуемом ответе объясняется, почему переход кода OP из Objective C в Swift является ошибочным и не работает. Мой вопрос - нет. Я пытаюсь понять, почему, когда я устанавливаю это на свой iPhone, у которого сотни контактов allContacts нет товаров. Я пытался понять правильный способ поместить все мои контакты в массив. В основном из-за необходимости ведения бизнеса я делаю свой собственный собеседник, потому что я не хочу использовать встроенную в нее Apple.

+0

Не обман. См. Мой вопрос снова – logixologist

ответ

1

Прежде всего, вы пытаетесь использовать устаревшую apis. Возможно, поэтому ABAddressBookCreateWithOptions не работает.

Однако моя рекомендация, основанная на вашем редактировании (где вы говорите, что хотите создать собственный пользовательский интерфейс), заключается в использовании Contacts framework.

См this github gist:

#import <Contacts/Contacts.h> 

@implementation ContactsScan 

- (void) contactScan 
{ 
    if ([CNContactStore class]) { 
     //ios9 or later 
     CNEntityType entityType = CNEntityTypeContacts; 
     if([CNContactStore authorizationStatusForEntityType:entityType] == CNAuthorizationStatusNotDetermined) 
     { 
      CNContactStore * contactStore = [[CNContactStore alloc] init]; 
      [contactStore requestAccessForEntityType:entityType completionHandler:^(BOOL granted, NSError * _Nullable error) { 
       if(granted){ 
        [self getAllContact]; 
       } 
      }]; 
     } 
     else if([CNContactStore authorizationStatusForEntityType:entityType]== CNAuthorizationStatusAuthorized) 
     { 
      [self getAllContact]; 
     } 
    } 
} 

-(void)getAllContact 
{ 
    if([CNContactStore class]) 
    { 
     //iOS 9 or later 
     NSError* contactError; 
     CNContactStore* addressBook = [[CNContactStore alloc]init]; 
     [addressBook containersMatchingPredicate:[CNContainer predicateForContainersWithIdentifiers: @[addressBook.defaultContainerIdentifier]] error:&contactError]; 
     NSArray * keysToFetch [email protected][CNContactEmailAddressesKey, CNContactPhoneNumbersKey, CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPostalAddressesKey]; 
     CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch]; 
     BOOL success = [addressBook enumerateContactsWithFetchRequest:request error:&contactError usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){ 
      [self parseContactWithContact:contact]; 
     }]; 
    } 
} 

- (void)parseContactWithContact :(CNContact*)contact 
{ 
    NSString * firstName = contact.givenName; 
    NSString * lastName = contact.familyName; 
    NSString * phone = [[contact.phoneNumbers valueForKey:@"value"] valueForKey:@"digits"]; 
    NSString * email = [contact.emailAddresses valueForKey:@"value"]; 
    NSArray * addrArr = [self parseAddressWithContac:contact]; 
} 

- (NSMutableArray *)parseAddressWithContac: (CNContact *)contact 
{ 
    NSMutableArray * addrArr = [[NSMutableArray alloc]init]; 
    CNPostalAddressFormatter * formatter = [[CNPostalAddressFormatter alloc]init]; 
    NSArray * addresses = (NSArray*)[contact.postalAddresses valueForKey:@"value"]; 
    if (addresses.count > 0) { 
     for (CNPostalAddress* address in addresses) { 
      [addrArr addObject:[formatter stringFromPostalAddress:address]]; 
     } 
    } 
    return addrArr; 
} 

@end 

Примечание: Этот код был написан не мной. Источник можно найти по адресу github.

+0

Спасибо, сэр! Я видел документацию по этому вопросу, и он сказал, что он устарел в 9.0. У меня было меньше 9, поэтому я решил, что это должно сработать. – logixologist

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

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