0

我们正在使用 CNContactStore 从 iphone 获取联系人,但我们正在从我的 iphone 获取所有联系人,这也提供了所有同步的联系人,如 facebook 和其他 gmail 联系人,但我只需要获取存储在 iphone 中的联系人。如何做到这一点,请帮助我摆脱这个。

4

1 回答 1

0

导入这些

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>


- (void) fetchContactsFromDevice {

//1
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

if (addressBook != nil) {

    ABAddressBookRequestAccessWithCompletion( addressBook, ^(bool granted, CFErrorRef error) {

        if (error) {
            NSLog(@"ABAddressBookRequestAccessWithCompletion error: %@", CFBridgingRelease(error));
        }

        if (granted) {
            // if they gave you permission, then just carry on

            [self listPeopleInAddressBook:addressBook];
        } else {
            // however, if they didn't give you permission, handle it gracefully, for example...

            dispatch_async(dispatch_get_main_queue(), ^{
                // BTW, this is not on the main thread, so dispatch UI updates back to the main queue

                [[[UIAlertView alloc] initWithTitle:nil message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
            });
        }

        CFRelease(addressBook);

    });

} else { 

    NSLog(@"Error reading Address Book : %@", error);
}

}

此方法将帮助您仅获取地址簿号码

然后用它来绘制

- (void)listPeopleInAddressBook:(ABAddressBookRef)addressBook {

NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
NSInteger numberOfPeople = [allPeople count];

for (NSInteger i = 0; i < numberOfPeople; i++) {
    ABRecordRef person = (__bridge ABRecordRef)allPeople[i];

    NSMutableDictionary * user = [[NSMutableDictionary alloc] init];

    NSString *firstName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    NSString *lastName  = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty));

    [user setObject:firstName forKey:@"firstname"];
    [user setObject:lastName forKey:@"lastname"];


    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

    CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
    for (CFIndex i = 0; i < numberOfPhoneNumbers; i++) {
        NSString *phoneNumber = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, i));

        [user setObject:phoneNumber forKey:@"phoneNumbers"];
    }

    CFRelease(phoneNumbers);

    [self.contactDataArray addObject:user];
}

[yourtable reloadData];

}

希望这会有所帮助

于 2015-10-22T06:29:14.260 回答