2012-12-24 2 views
1

전화 번호부 액세스가 필요한 Xcode에서 iPhone 앱을 만들고 있습니다. 주소록에있는 모든 전화 번호가 필요하며 그 번호는 NSArray에 저장해야합니다.iPhone 주소록 전화 번호

+0

확인 [iOS 용 주소록 프로그래밍 가이드 (http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Introduction.html#//apple_ref/doc/uid/TP40007744). – iDev

답변

0
Try this, 
     NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init]; 

    ABMultiValueRef multiPhones = ABRecordCopyValue(person,kABPersonPhoneProperty); 
    for(CFIndex i=0;i<ABMultiValueGetCount(multiPhones);++i) { 
    CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); 
     NSString *phoneNumber = (NSString *) phoneNumberRef; 

    [phoneNumbers addObject:phoneNumber]; 
    } 
2
//Also you need to include AddressBook.framework 
#import <AddressBook/AddressBook.h> 
#import <AddressBook/ABAddressBook.h> 
#import <AddressBook/ABPerson.h> 

[contactList removeAllObjects]; 

// open the default address book.  
ABAddressBookRef m_addressbook = ABAddressBookCreate(); 

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

// can be cast to NSArray, toll-free 
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); 
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); 

// CFStrings can be cast to NSString! 
for (int i=0;i < nPeople;i++) {  
MContact *contact = [[MContact alloc] init]; 
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 
CFStringRef firstName, lastName; 
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
contact.name = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 

ABMutableMultiValueRef eMail = ABRecordCopyValue(ref, kABPersonEmailProperty); 

if(ABMultiValueGetCount(eMail) > 0) { 
    contact.email = (NSString *)ABMultiValueCopyValueAtIndex(eMail, 0); 
    [contactList addObject:contact]; 
} 

CFRelease(ref); 
CFRelease(firstName); 
CFRelease(lastName); 
} 
+0

마찬가지로 전화 번호에 액세스 할 수 있습니다. –

0

엑스 코드 4.5.1> = 0이 코드, 당신이 버전 아래에있는 경우 조건이라면 필요 쓸 경우. addressbook에 ABAddressBookCreate()을 할당하면됩니다.

__block BOOL accessGranted = NO; 
     if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { 
      NSLog(@"Device version is greater than 6.0"); 
      addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
       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); 
        } 
     } 
     else{ 
      addressBook = ABAddressBookCreate(); 
      accessGranted = YES; 
     } 

if (accessGranted) { 

    NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init]; 
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook); 

    for (CFIndex i = 0; i < CFArrayGetCount(people); i++) { 
     ABRecordRef person = CFArrayGetValueAtIndex(people, i); 

     NSString *name = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 

     ABMultiValueRef multiPhones = ABRecordCopyValue(person,kABPersonPhoneProperty); 
     NSMutableArray *individualPhoneNumbers = [[NSMutableArray alloc] init]; 
     if (ABMultiValueGetCount(multiPhones) >0) { 

      for(CFIndex i=0;i<ABMultiValueGetCount(multiPhones);++i) { 
       CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); 
       NSString *phoneNumber = (__bridge NSString *) phoneNumberRef; 

       [individualPhoneNumbers addObject:phoneNumber]; 
      } 
      [phoneNumbers addObject:individualPhoneNumbers]; 
     } 

    } 
관련 문제