Адресная книга IOS не отображает весь номер телефона из списка контактов

Я использую Addressbook в своем приложении IOS для получения имени и номеров контактов, но странно, что он показывает номер телефона некоторых из контактов.

Я надеялся, что он отобразит список контактов с номером телефона.

так вот мой код для извлечения телефонных номеров:

 -(void)getAddressbookData { #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 ABAddressBookRef addressBook = ABAddressBookCreate(); #else CFErrorRef *error = nil; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); #endif NSArray * people; BOOL accessGranted = [self __addressBookAccessStatus:addressBook]; if (accessGranted) { people = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); // Do whatever you need with thePeople... } CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); NSMutableArray *contactArray = [[NSMutableArray alloc] init]; for (CFIndex i = 0; i < nPeople; i++) { ABRecordRef record = CFArrayGetValueAtIndex((__bridge CFArrayRef)(people), i); NSString *firstName = (__bridge NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty); NSString *lastName = (__bridge NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty); NSString *fullName = nil; if (ABPersonGetCompositeNameFormat() == kABPersonCompositeNameFormatFirstNameFirst) fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; else fullName = [NSString stringWithFormat:@"%@, %@", lastName, firstName]; [contactArray addObject:fullName]; // // Phone Numbers // ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(record, kABPersonPhoneProperty); CFIndex phoneNumberCount = ABMultiValueGetCount( phoneNumbers ); NSMutableArray *numbersArray = [[NSMutableArray alloc] init]; for ( CFIndex k=0; k<phoneNumberCount; k++ ) { CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex( phoneNumbers, k ); CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex( phoneNumbers, k ); CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel( phoneNumberLabel ); // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile" // Find the ones you want here // // NSLog(@"-----PHONE ENTRY -> name:%@ : %@ : %@", fullName, phoneNumberLocalizedLabel, phoneNumberValue ); [numbersArray addObject:CFBridgingRelease(phoneNumberValue)]; CFRelease(phoneNumberLocalizedLabel); CFRelease(phoneNumberLabel); CFRelease(phoneNumberValue); } // NSLog(@"phone numbers %@", numbersArray); [contactDictionary setObject:numbersArray forKey:fullName]; CFRelease(record); } selectContacts = contactArray; // NSLog(@"dictionary of array %@", contactDictionary); //NSLog(@"contacts count %d", [selectContacts count]); } -(BOOL)__addressBookAccessStatus:(ABAddressBookRef) addressBook { __block BOOL accessGranted = NO; if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { accessGranted = granted; dispatch_semaphore_signal(sema); }); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); // dispatch_release(sema); } else { // we're on iOS 5 or older accessGranted = YES; } return accessGranted; } 

поэтому numbersArray пуст для некоторых из контактов, которые я не знаю, почему это происходит.

попробуйте это для телефона нет.

  ABAddressBookRef addressBook = ABAddressBookCreate(); NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); for(id person in people){ //fetch multiple phone nos. ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty); for (CFIndex j=0; j < ABMultiValueGetCount(multi); j++) { NSString* phone = (NSString*)ABMultiValueCopyValueAtIndex(multi, j); [numbersArray addObject:phone]; [phone release]; } } 

и вы должны выделить свой массив, прежде чем использовать. в методе viewDidLoad напишите это для массива alloc

  numbersArray=[[NSMutableArray alloc] init]; 

Я использую этот код для доступа к мобильному номеру из своей адресной книги и ее работоспособности.

 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allSources = ABAddressBookCopyArrayOfAllPeople( addressBook ); for (CFIndex i = 0; i < ABAddressBookGetPersonCount( addressBook ); i++) { ABRecordRef aSource = CFArrayGetValueAtIndex(allSources,i); ABMultiValueRef phones =(NSString*)ABRecordCopyValue(aSource, kABPersonPhoneProperty); NSString* mobileLabel; for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) { mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i); if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) { home_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i) retain]; } if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) { basic_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i)retain]; } if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMainLabel]) { work_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i)retain]; } } 

Вы можете попробовать это.

Вот быстрая версия ответа Самира, которая работала для меня.

 var allNumbers: [AnyObject] = [] let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue() let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord] for person in people { var phones: ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() for j in 0..<ABMultiValueGetCount(phones) { var phone: String = ABMultiValueCopyValueAtIndex(phones, j).takeRetainedValue() as String allNumbers.append(phone) } } println(allNumbers) 
  • iPhone: адресная книга иногда стирается
  • Доступ к определенной группе ABAddressbook
  • ABAddressBookCreate (), ABAddressBookGetGroupCount, ... return @ "0x00000000 <nil>"?
  • хранить широту и долготу в адресной книге ios
  • Ошибка ABRecordCopyValue () EXC_BAD_ACCESS
  • Уведомление в iOS при изменении порядка сортировки
  • peoplePickerNavigationController: shouldContinueAfterSelectingPerson: property: identifier:
  • Swift - проверка свойства одиночного значения неуправляемой адресной книги для nil
  • Objective c алгоритм для импорта адресной книги с большим количеством контактов
  • адресная книга iOS в разных очередях
  • ABRecordRef vCard
  • Interesting Posts
    Давайте будем гением компьютера.