将iOS地址簿存储在数组中,并在UITableView中显示

将iOS地址簿存储在数组中,并在UITableView中显示,ios,objective-c,Ios,Objective C,我想在数组中存储iOS的地址簿,并在UITableView中显示它。这是我正在使用的代码。我只想显示联系人姓名和电话号码 pragma标记-地址簿方法 请参阅。我想它应该能回答你所有的问题。为什么你在一篇文章的开头打电话给选择器导航器?您应该通过添加为右栏按钮项的按钮来调用它。然后选择所需人员并将其存储在可变数组中。然后关闭控制器并加载表视图 编辑: 请查找下面的代码以供参考。我希望这可能有助于理解它是如何工作的。下面是对示例代码的参考 接口: 与此相反: //Deprecated in iOS

我想在数组中存储iOS的地址簿,并在UITableView中显示它。这是我正在使用的代码。我只想显示联系人姓名和电话号码

pragma标记-地址簿方法
请参阅。我想它应该能回答你所有的问题。

为什么你在一篇文章的开头打电话给选择器导航器?您应该通过添加为右栏按钮项的按钮来调用它。然后选择所需人员并将其存储在可变数组中。然后关闭控制器并加载表视图

编辑: 请查找下面的代码以供参考。我希望这可能有助于理解它是如何工作的。下面是对示例代码的参考

接口:

与此相反:

//Deprecated in iOS 8.0.
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    NSString *name =  (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    ABMultiValueRef phoneNumbers = (ABRecordCopyValue(person, kABPersonPhoneProperty));
    NSString *mobile = @"";
    NSString *label = @"";
    for (CFIndex i=0 ; i<ABMultiValueGetCount(phoneNumbers); i++) {
        label = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(phoneNumbers, i);
        if ([label isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) {
            mobile = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
        }else if([label isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]){
            mobile = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
            break;
        }
    }

    NSDictionary *dict = @{@"name":name,
                           @"phone":mobile};

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.phone == %@ && self.name == %@",mobile,name];

    NSArray *personAlready = [self.peopleSelected filteredArrayUsingPredicate:predicate];
    NSLog(@"personAlready %@",personAlready);
    if (!personAlready.count) {
        [self.peopleSelected addObject:dict];
    }

    return NO;
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{

    return YES;
}

#pragma mark - UITableViewDataSource
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.peopleSelected.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    NSDictionary *dict = self.peopleSelected[indexPath.row];
    cell.textLabel.text = dict[@"name"];
    return cell;
}

#pragma mark - UITableViewDelegate

@end

请检查代码。我已经编辑了我的答案。如果我的回答对你有帮助,你可以接受。如果你需要其他帮助,请告诉我。
 (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person{
    ABMultiValueRef phone = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty);
    ABMultiValueRef personID = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonFirstNameProperty);
    
    CFStringRef phoneID = ABMultiValueCopyValueAtIndex(phone, 0);
     //CFStringRef personName= ABMultiValueCopyValueAtIndex(personID, 0);
    NSLog(@"%@",[NSString stringWithFormat:@"%@", phoneID]);
    NSLog(@"%@",[NSString stringWithFormat:@"%@", personID]);
    
}
#import <UIKit/UIKit.h>

@interface JSViewController : UITableViewController

@end
#import "JSViewController.h"
#import <AddressBookUI/AddressBookUI.h>
#import <AddressBook/AddressBook.h>

@interface JSViewController ()<ABPeoplePickerNavigationControllerDelegate,UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) NSMutableArray *peopleSelected;

@end

@implementation JSViewController

-(NSMutableArray *)peopleSelected
{
    if (!_peopleSelected) {
        _peopleSelected = [NSMutableArray new];
}

return _peopleSelected;

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    UIBarButtonItem *selectPerson = [[UIBarButtonItem alloc] initWithTitle:@"Select" style:UIBarButtonItemStyleBordered target:self action:@selector(btnSelectHandler:)];
    self.navigationItem.rightBarButtonItem = selectPerson;


}

- (void)btnSelectHandler:(id)sender
{
    ABPeoplePickerNavigationController *peoplePicker = [ABPeoplePickerNavigationController new];
    peoplePicker.peoplePickerDelegate = self;
    [self.navigationController presentViewController:peoplePicker animated:YES completion:^{

    }];
}

#pragma mark - ABPeoplePickerNavigationControllerDelegate
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker;
{
    [self dismissViewControllerAnimated:YES completion:^{
        if (self.peopleSelected) {
            [self.tableView reloadData];
        }
    }];
}
- peoplePickerNavigationController:didSelectPerson:
//Deprecated in iOS 8.0.
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    NSString *name =  (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    ABMultiValueRef phoneNumbers = (ABRecordCopyValue(person, kABPersonPhoneProperty));
    NSString *mobile = @"";
    NSString *label = @"";
    for (CFIndex i=0 ; i<ABMultiValueGetCount(phoneNumbers); i++) {
        label = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(phoneNumbers, i);
        if ([label isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) {
            mobile = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
        }else if([label isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]){
            mobile = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
            break;
        }
    }

    NSDictionary *dict = @{@"name":name,
                           @"phone":mobile};

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.phone == %@ && self.name == %@",mobile,name];

    NSArray *personAlready = [self.peopleSelected filteredArrayUsingPredicate:predicate];
    NSLog(@"personAlready %@",personAlready);
    if (!personAlready.count) {
        [self.peopleSelected addObject:dict];
    }

    return NO;
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{

    return YES;
}

#pragma mark - UITableViewDataSource
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.peopleSelected.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    NSDictionary *dict = self.peopleSelected[indexPath.row];
    cell.textLabel.text = dict[@"name"];
    return cell;
}

#pragma mark - UITableViewDelegate

@end