2015-11-18 36 views
0

我正在开发一个应用程序,其中我想从我的iPhone获取所有联系人,包括详细信息(名字,姓氏,电子邮件和手机号码)。应用程序的部署目标是iOS 7及更高版本。获取所有iphone在iOS中的联系人与iOS 7的应用程序

我曾尝试下面的代码,但它根本不工作。

我的代码是在这里

__block NSMutableArray *myContacts = [[NSMutableArray alloc]init]; 

    CFErrorRef error = NULL; 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 

    __block BOOL userDidGrantAddressBookAccess; 
    CFErrorRef addressBookError = NULL; 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined || 
     ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
    { 
     addressBook = ABAddressBookCreateWithOptions(NULL, &addressBookError); 
     dispatch_semaphore_t sema = dispatch_semaphore_create(0); 
     ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) 
     { 
      userDidGrantAddressBookAccess = granted; 
      dispatch_semaphore_signal(sema); 
      if (addressBook!=nil) 
      { 
       NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 

       NSUInteger i = 0; 
       for (i = 0; i<[allContacts count]; i++) 
       { 
             ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; 
        NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty); 


        [myContacts addObject:firstName]; 
       } 
       CFRelease(addressBook); 

      } 
      else 
      { 
       NSLog(@"Error"); 

      } 
     }); 
     dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
    } 
    else 
    { 
     if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
      ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) 
     { 
      NSLog(@"denied"); 
      // Display an error. 
     } 
    } 

    NSLog(@"%@", myContacts); 

回答

1

你的代码几乎是完全正确的。您只需在地址簿请求的完成块中打印myContacts阵列即可。

我做了一些代码更改为您提供:

__block NSMutableArray *myContacts = [[NSMutableArray alloc]init]; 

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 

__block BOOL userDidGrantAddressBookAccess; 
CFErrorRef addressBookError = NULL; 

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined || 
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
{ 
    addressBook = ABAddressBookCreateWithOptions(NULL, &addressBookError); 
    dispatch_semaphore_t sema = dispatch_semaphore_create(0); 
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { 
    userDidGrantAddressBookAccess = granted; 
    dispatch_semaphore_signal(sema); 
    if (addressBook!=nil) 
    { 
     NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 

     NSUInteger i = 0; 
     for (i = 0; i<[allContacts count]; i++) 
     { 
      ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; 
      NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty); 

      // you need to do a nil check before adding a firstName to the array 
      // 
      // some contacts won't have first names, after all 
      if([firstName length] > 0) 
      { 
       [myContacts addObject:firstName]; 
      } 
     } 
     CFRelease(addressBook); 
    } 
    else 
    { 
     NSLog(@"Error"); 
    } 

    // *** HERE is where to print out the myContacts array*** 
    NSLog(@"addresses are %@", myContacts); 
    }); 
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
} 
else 
{ 
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
     ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) 
    { 
     NSLog(@"denied"); 
     // Display an error. 
    } 
} 

// don't NSLog here, as myContacts array likey won't be filled out here... 
// print it out in the completion block instead 
// NSLog(@"%@", myContacts); 

顺便说一句,如果你的代码,只是要在iOS 9和新的运行,可考虑使用CNContactStore相反,随着通讯录API的已被弃用,并可能最终会从iOS中删除。

+0

请更新您获取姓氏,电子邮件和图片的代码。 –

+0

既然你看到我在做什么,你能做到吗? –

+0

是的,我看过了,它的工作原理 –

相关问题