2012-11-07 4 views
0

다음 코드를 사용하여 주소록에있는 모든 연락처의 휴대 전화 번호 (즉, 첫 번째 전화 번호)를 가져옵니다. 내가 NSArray주소록에서 전화 번호 가져 오기

self.dataSource = [[NSMutableArray alloc]init]; // dataSouce is delared in .h file 
ABAddressBookRef addressBook = ABAddressBookCreate(); 
NSMutableArray *allPeople = (__bridge NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 
int nPeople = ABAddressBookGetPersonCount(addressBook); 

for(int i=0; i < nPeople; i++){ 
    ABRecordRef person = (__bridge ABRecordRef)([allPeople objectAtIndex:i]); 
    NSString *name = @""; 

    if(ABRecordCopyValue(person, kABPersonFirstNameProperty) != NULL) 
     name = [[NSString stringWithFormat:@"%@", ABRecordCopyValue(person, kABPersonFirstNameProperty)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
    [_dataSource addObject: name]; 

    ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    _phoneNumbers = (__bridge NSArray*)ABMultiValueCopyValueAtIndex(phoneNumberProperty, 0); 
    CFRelease(phoneNumberProperty); 
    NSLog(@"Phone numbers = %@", _phoneNumbers); 
} 

으로 모든 번호를 저장하고 싶지만 내가 NSLog(@"Phone numbers = %@", _phoneNumbers);를 사용하면 출력 내가

Phone numbers = ( 
"1 (800) 111-1111", 
"(222) 355-5668", 
"(910) 192-0192" 
) 

같은 NSArray의 출력을 원하는

2012-11-07 15:31:06.116 contacts[4938:12b03] Phone numbers = 1 (800) 111-1111 
2012-11-07 15:31:06.117 contacts[4938:12b03] Phone numbers = (222) 355-5668 
2012-11-07 15:31:06.118 contacts[4938:12b03] Phone numbers = (910) 192-0192 

로 나오면 어떻게 할 수 이 작업을 수행 ?

답변

2

당신은 간단하게 내가 구글을 통해이를 발견하고 예를 들어이 주소록 코드를 사용했다이

self.dataSource = [[NSMutableArray alloc]init]; // dataSouce is delared in .h file 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 
    NSMutableArray *allPeople = (__bridge NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 
    int nPeople = ABAddressBookGetPersonCount(addressBook); 

    NSMutableArray *arrContacts = [[NSMutableArray alloc] init]; 

    for(int i=0; i < nPeople; i++){ 
     ABRecordRef person = (__bridge ABRecordRef)([allPeople objectAtIndex:i]); 
     NSString *name = @""; 

     if(ABRecordCopyValue(person, kABPersonFirstNameProperty) != NULL) 
      name = [[NSString stringWithFormat:@"%@", ABRecordCopyValue(person, kABPersonFirstNameProperty)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
     [_dataSource addObject: name]; 

     ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     _phoneNumbers = (__bridge NSArray*)ABMultiValueCopyValueAtIndex(phoneNumberProperty, 0); 
     CFRelease(phoneNumberProperty); 
     NSLog(@"Phone numbers = %@", _phoneNumbers); 
     [arrContacts addObject:_phoneNumbers]; 
    } 
    NSLog(@"Phone numbers : %@",arrContacts); 
+0

는 일, 감사 톤 :

NSArray *_phoneNumbers = (__bridge NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty); 

당신은 당신이 이런 짓을 했을까 첫 번째 전화 번호를 얻고 싶다면

. –

+0

환영합니다 :) –

+0

iOS 7에서이를 수행 할 수있는 방법이 있습니까? –

1

처럼 않지만, 내가 여기에 오는 다른 사람을 보정 것 실수를 발견 할 수 있습니다.

ABMultiValueCopyValueAtIndex을 사용하는 경우 CFTypeRef 유형을 반환합니다. 이 함수는 전화 번호가 CFStringRefNSArray*으로 캐스팅되어서는 안되는 해당 인덱스 (이 경우 인덱스 0)에서 전화 번호 만 가져옵니다.

ABMultiValueCopyArrayOfAllValues은 연락처에 저장된 모든 전화 번호의 배열을 가져 오는 올바른 호출입니다. Sarafaraz가 그의 대답에서하고있는 것처럼 배열에 저장하고 기록 할 수 있습니다.

CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phoneNumberProperty, 0); 
NSString *phoneString = (__bridge NSString*)phoneNumberRef; 
관련 문제