使用objective-c从ipad联系方式

时间:2013-08-01 07:35:12

标签: iphone objective-c uiimageview uiimage abaddressbook

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

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上运行时获取图像

1 个答案:

答案 0 :(得分:0)

您可以将此代码实施到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中。 此数据包括名字,姓氏,电话号码和电子邮件地址。希望它有所帮助。