2012-01-23 75 views
2

我正在开发一个应用程序,但现在我坚持在这一点(如何获得街道,邮编,州,国家)的所有联系人在iphone通讯簿。任何示例代码都会非常有帮助。如何获得iphone地址簿中所有联系人的家庭地址

ABAddressBookRef addressBook = ABAddressBookCreate(); 

NSArray *contactArr = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 

for (int i = 0; i < [contactArr count]; i++) 
{ 
    ABRecordRef person = (ABRecordRef)[contactArr objectAtIndex:i]; 

    ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty); 

    for(CFIndex j = 0; j < ABMultiValueGetCount(address); j++) 
    { 
     CFDictionaryRef addressDict = ABMultiValueCopyValueAtIndex(address, j); 

     CFStringRef streetValue = CFDictionaryGetValue(addressDict, kABPersonAddressStreetKey); 

     CFStringRef cityValue = CFDictionaryGetValue(addressDict, kABPersonAddressCityKey); 

     CFStringRef stateValue = CFDictionaryGetValue(addressDict, kABPersonAddressStateKey); 

     CFStringRef zipValue = CFDictionaryGetValue(addressDict, kABPersonAddressZIPKey); 

     CFStringRef countryValue = CFDictionaryGetValue(addressDict, kABPersonAddressCountryKey); 

    } 

} 

回答

7

您可以为所有联系人作为获取地址。它遵循ARC并尊重授权状态。 该方法返回一个NSMutableDictionary,其中包含该人员的姓名以及一个或多个地址(通过ID连接)。

- (NSMutableDictionary *)MyGetAddressesAndNamesOfContacts 
{ 
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No permission" message:@"This App has no permission to access your contacts." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     [alert show]; 

     return nil; 
    } 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Why this App needs your contacts" message:@"In the following your device will ask you whether this App is allowed to access your contacts. This is recommented because..." delegate:self cancelButtonTitle:@"I understand" otherButtonTitles: nil]; 
     [alert show]; 
    } 

    ABAddressBookRef addressBook = ABAddressBookCreate();  // deprecated since iOS 6 
    NSArray *contactArr = (NSArray *)CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook)); 
    NSMutableDictionary *dPersons = [[NSMutableDictionary alloc] init]; 

    for (int i = 0; i < [contactArr count]; i++) 
    { 
     ABRecordRef person = (ABRecordRef)CFBridgingRetain([contactArr objectAtIndex:i]); 
     NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
     NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty); 
     NSString *sPersonName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 

     ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty); 
     NSString *sAddress; 

     for(CFIndex j = 0; j < ABMultiValueGetCount(address); j++) 
     { 
      CFDictionaryRef addressDict = ABMultiValueCopyValueAtIndex(address, j); 

      CFStringRef streetValue = CFDictionaryGetValue(addressDict, kABPersonAddressStreetKey); 
      CFStringRef cityValue = CFDictionaryGetValue(addressDict, kABPersonAddressCityKey); 
      CFStringRef stateValue = CFDictionaryGetValue(addressDict, kABPersonAddressStateKey); 
      CFStringRef zipValue = CFDictionaryGetValue(addressDict, kABPersonAddressZIPKey); 
      CFStringRef countryValue = CFDictionaryGetValue(addressDict, kABPersonAddressCountryKey); 

      sAddress = [NSString stringWithFormat:@"%@ %@, %@", streetValue, cityValue, countryValue]; 
     [dPersons setObject:sAddress forKey: [NSString stringWithFormat:@"%@%d %@%ld", @"AddressFromNameID", i, @"Number", j]]; 
     } 

     [dPersons setObject:sPersonName forKey: [NSString stringWithFormat:@"%@%d", @"NameWithID", i]]; 
    } 

    return dPersons; 
} 
+0

thanx您的巨大帮助。 –

0

我知道这个问题是旧的,但这里是它是基于saadnib的答案一个编辑的版本 -

相关问题