从ipad使用objective-c的联系方式

问题描述:

如何从iPad获取联系人详细信息并在我的应用程序中使用它。我正在使用以下代码并从模拟器获取详细信息。但在iPad上运行时,我没有收到联系人图片,电子邮件等,我正确地获取了电话号码。从ipad使用objective-c的联系方式

ABAddressBookRef addressBook = ABAddressBookCreate(); 

// Get all contacts in the addressbook 
NSArray *allPeople = (__bridge NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 

for (id person in allPeople) { 
    // Get all phone numbers of a contact 
    ABMultiValueRef phoneNumbers = ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty); 
    ABMultiValueRef emailaddress = ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonEmailProperty); 


    // If the contact has multiple phone numbers, iterate on each of them 
    for (int i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { 
     NSString *phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, i); 



     // Remove all formatting symbols that might be in both phone number being compared 
     NSCharacterSet *toExclude = [NSCharacterSet characterSetWithCharactersInString:@"/.()- +"]; 
     phone = [[phone componentsSeparatedByCharactersInSet:toExclude] componentsJoinedByString: @""]; 


     if ([phone isEqualToString:number]) { 

      NSData *contactImageData = (__bridge NSData*)ABPersonCopyImageData((__bridge ABRecordRef)(person)); 
      NSString *mail = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(emailaddress, i); 
      NSLog(@"%@",mail); 
      if(mail) 
      { 
       hasEmail=TRUE; 
       NSLog(@"true"); 
      } 
      else{ 
       hasEmail=FALSE; 
       NSLog(@"false"); 
      } 

      ContactImage = [[UIImage alloc] initWithData:contactImageData]; 
      // [conImage setImage:ContactImage]; 

      break; 
      break; 
     } 
    } 
} 
if(ContactImage) 
{ 
    [conImage setImage:ContactImage]; 
} 
else{ 

    NSLog(@"no image"); 
} 

我需要让图像在iPad上

运行时可以执行该代码为ViewDidLoad方法。

ABAddressBookRef addressBook; 
if ([self isABAddressBookCreateWithOptionsAvailable]) { 
    CFErrorRef error = nil; 
    addressBook = ABAddressBookCreateWithOptions(NULL,&error); 
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { 
     // callback can occur in background, address book must be accessed on thread it was created on 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      if (error) { 

      } else if (!granted) { 


      } else { 
       // access granted 
       [self GetAddressBook]; 


      } 
     }); 
    }); 

} else { 
    // iOS 4/5 

    [self GetAddressBook]; 
} 

方法用于获取联系人: -

-(void)GetAddressBook 
{ 
    Contacts = [[NSMutableArray alloc]init]; 

    if (ABAddressBookCreateWithOptions) { 

    @try { 

     ABAddressBookRef addressBook = ABAddressBookCreate(); 
     // NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
     if (!addressBook) { 
      NSLog(@"opening address book"); 
     } 
     CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
     CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 

     NSLog(@"opening address book ==%ld",nPeople); 

     for (int i=0;i < nPeople;i++) { 

      NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary]; 
      ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 
      NSString *Contact; 
      ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty)); 
      CFStringRef firstName, lastName; 
      NSMutableArray *array = [[NSMutableArray alloc]init]; 
      NSString *email; 
      firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
      lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
      ABMultiValueRef multiValueRef = ABRecordCopyValue(ref, kABPersonEmailProperty); 
      array = [(__bridge NSMutableArray *)ABMultiValueCopyArrayOfAllValues(multiValueRef) mutableCopy]; 
      email = ([array count] > 0) ? array[0] : @""; 

      if(firstName) 
      { 
       Contact = [NSString stringWithFormat:@"%@", firstName]; 
       if(lastName) 
        Contact = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; 
      } 
      [dOfPerson setObject:Contact forKey:@"name"]; 
      [dOfPerson setObject:[NSString stringWithFormat:@"%d", i] forKey:@"id"]; 
      [dOfPerson setObject:[NSString stringWithFormat:@"%@",@""] forKey:@"found"]; 
      [dOfPerson setObject:email forKey:@"email"]; 

      NSString* mobileLabel; 
      for(CFIndex j = 0; j< ABMultiValueGetCount(phones); j++) 
      { 
       mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, j); 
       if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) 
       { 
        [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"Phone"]; 
       } 
       else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) 
       { 
        [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"Phone"]; 
        break ; 
       } 
      } 
      [Contacts addObject:dOfPerson]; 
     } 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e);   
    } 
    dispatch_async(dispatch_get_main_queue(), ^{   

    }); 

    NSLog(@"%@",Contacts); 
    if([Contacts count]>0) 
    { 
     NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
     [Contacts sortUsingDescriptors:[NSArray arrayWithObject:sort]]; 
     [Tableview reloadData]; 
    } 
    else 
    { 

    } 
} 
else 
{ 
    [self GetAddressBook]; 
} 
} 

这里联系人NSMutableArray并且所有数据在UITableView被显示。 此数据包括名字,姓氏,电话号码和电子邮件地址。希望能帮助到你。

+0

我的编码工作正常。但是,虽然使用iPad我没有得到图像和电子邮件ID,这是唯一的问题 – priya

+0

从这你可以得到电子邮件ID ..... – IronManGill

+0

但图像?我需要形象 – priya