2013-05-31 4 views
-3

안녕하세요, 버튼을 클릭하면 전체 주소록 연락처를 검색하고 형식으로 표시해야하는 버튼 동작 방법이있는 곳에서 앱을 개발 중입니다. 문자열 어떻게 할 수있는 사람이 전화 코드와 함께. 나는 이틀 동안이 일을 할 수 없다.주소록의 데이터를 검색하고 문자열 형식으로 표시

나는 그나마 내가 필요한 모든 버튼 액세스를 문자열의 형태로 모든 연락처 표시를 클릭 무엇 ABPeoplePickerNavigationController 접근이 를 사용하여 탐색 원하는 .

+0

Pl 검색을 사용하십시오. 'ABAddressBookCopyArrayOfAllPeople'이 필요한 것입니다. – Mar0ux

+0

ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople (addressBook); CFIndex nPeople = ABAddressBookGetPersonCount (addressBook); for (int i = 0; i alpha

답변

1

가 iOS 6뿐만 아니라 아이폰 OS 5.0 이상 작동이 시도 :

먼저 링크 바이너리와 라이브러리에 다음과 같은 프레임 워크를 추가

  • AddressBookUI.framework
  • 주소록 .framework

그들은

#import <AddressBook/ABAddressBook.h> 
#import <AddressBookUI/AddressBookUI.h> 

그럼 내가이 시험 다음 코드

ABAddressBookRef addressBook = ABAddressBookCreate(); 

__block BOOL accessGranted = NO; 

if (ABAddressBookRequestAccessWithCompletion != NULL) { // We are on iOS 6 
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { 
     accessGranted = granted; 
     dispatch_semaphore_signal(semaphore); 
    }); 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 
    dispatch_release(semaphore); 
} 

else { // We are on iOS 5 or Older 
    accessGranted = YES; 
    [self getContactsWithAddressBook:addressBook]; 
} 

if (accessGranted) { 
    [self getContactsWithAddressBook:addressBook]; 
} 

// Get the contacts. 
- (void)getContactsWithAddressBook:(ABAddressBookRef)addressBook { 
    NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 

    NSUInteger index = 0; 
    NSMutableArray *firstNames = [[NSMutableArray alloc] init]; 

    for(index = 0; index <= ([arrayOfPeople count] - 1); index++){ 
     ABRecordRef currentPerson = (__bridge ABRecordRef)[arrayOfPeople objectAtIndex:index]; 
     NSString *currentFirstName = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty); 

     // If first name is empty then don't add to the array 
     if (![currentFirstName length] == 0) { 
      [firstNames addObject: currentFirstName]; 
     } 

    } 
    //OPTIONAL: Use the following line to sort the first names alphabetically 
    NSArray *sortedFirstNames = [firstNames sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
    NSLog(@"Total Count = %d \n Sorted By Name = %@", [sortedFirstNames count], sortedFirstNames); 
} 

을 사용하여 가져 오기와 그것을 작동합니다.

0

시도해보십시오.

ABAddressBookRef addressBook = ABAddressBookCreate(); 
    NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
    for(id person in people){ 
     NSString *name = [NSString stringWithFormat:@"%@ %@",(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty),(NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)]; 
    //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]; 
     } 

      /fetch multiple email ids. 
     ABMultiValueRef multiemail = ABRecordCopyValue(person, kABPersonEmailProperty); 
     for (CFIndex j=0; j < ABMultiValueGetCount(multiemail); j++) { 
      NSString* email = (NSString*)ABMultiValueCopyValueAtIndex(multiemail, j); 
      NSLog(@"Email=%@",email); 
     } 
    } 

및 사용하기 전에 배열을 할당해야합니다. viewDidLoad 메서드에서이 값을 alloc 배열에 쓰십시오.

  numbersArray=[[NSMutableArray alloc] init];