【问题标题】:iPhone address book phone numbersiPhone 通讯录电话号码
【发布时间】:2012-12-10 16:27:56
【问题描述】:

我正在 Xcode 中做一个需要访问电话簿的 iPhone 应用程序。我需要地址簿中的所有电话号码,并且应该存储在NSArray 中。

【问题讨论】:

标签: ios addressbook phone-number


【解决方案1】:
//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);
}

【讨论】:

  • 同样您可以访问电话号码
【解决方案2】:

Xcode 4.5.1 的此代码>=0,如果您的版本低于此版本,则无需编写 if 条件。只需将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];
        }

   }

【讨论】:

    【解决方案3】:
    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];
       }
    

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 2013-11-14
      • 2012-10-27
      • 2011-05-15
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多