Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从IOS中的通讯录中检索针对一个联系人保存的所有电话号码?_Ios_Objective C_Uitableview_Contacts_Addressbook - Fatal编程技术网

如何从IOS中的通讯录中检索针对一个联系人保存的所有电话号码?

如何从IOS中的通讯录中检索针对一个联系人保存的所有电话号码?,ios,objective-c,uitableview,contacts,addressbook,Ios,Objective C,Uitableview,Contacts,Addressbook,我正在构建一个iOS应用程序,尝试获取所有手机联系人并显示它们 现在的问题是,如果有两个电话号码是用一个名字储存的,那么在我的列表中只会显示第一个号码 我需要检索针对一个特定联系人保存的两个号码。有关iOS通讯簿的良好教程可在此处找到: 请查看苹果标准通讯簿教程。它还将帮助你理解它的基本原理 您可以通过[PJRAddressBook getPersonContacts]获取所有类型的联系人;在我的示例中,您可以从中获得所有电话号码。就像手机一样, Main phone、iPhone phone

我正在构建一个iOS应用程序,尝试获取所有手机联系人并显示它们

现在的问题是,如果有两个电话号码是用一个名字储存的,那么在我的列表中只会显示第一个号码


我需要检索针对一个特定联系人保存的两个号码。

有关iOS通讯簿的良好教程可在此处找到:


请查看苹果标准通讯簿教程。它还将帮助你理解它的基本原理

您可以通过[PJRAddressBook getPersonContacts]获取所有类型的联系人;在我的示例中,您可以从中获得所有电话号码。就像手机一样,
Main phone、iPhone phone、Home FaxPhone、Work FaxPhone、Other FaxPhone、pagerPhone

方法中的
应继续选择person
后,您可以获得所选
人员的参考,您可以获得不同的电话号码,如

multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
for(i=0; i< ABMultiValueGetCount(multi);i++)
{
    NSMutableString *numb = (__bridge NSMutableString*)ABMultiValueCopyValueAtIndex(multi, i);

    //next 5 line will make numbers are clear digit, without symbols. 
    numb = [NSMutableString stringWithFormat:@"%@",[numb stringByReplacingOccurrencesOfString:@" " withString:@""]];
    numb = [NSMutableString stringWithFormat:@"%@",[numb stringByReplacingOccurrencesOfString:@"(" withString:@""]];
    numb = [NSMutableString stringWithFormat:@"%@",[numb stringByReplacingOccurrencesOfString:@")" withString:@""]];
    numb = [NSMutableString stringWithFormat:@"%@",[numb stringByReplacingOccurrencesOfString:@"-" withString:@""]];
    numb = [NSMutableString stringWithFormat:@"%@",[numb stringByReplacingOccurrencesOfString:@"." withString:@""]];

    NSString *valAtIndex = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(multi,i);


    if([valAtIndex isEqualToString:@"_$!<Mobile>!$_"] || [valAtIndex isEqualToString:@"_$!<Other>!$_"])
        mobileNumber = numb;

    if ([valAtIndex isEqualToString:@"_$!<Home>!$_"])
        homeNumber = numb;

    if ([valAtIndex isEqualToString:@"_$!<Work>!$_"])
        WorkNuimber = numb;
}
multi=ABRecordCopyValue(person,kABPersonPhoneProperty);
对于(i=0;i
//导入两个框架
#进口
#进口
//创建属性
@属性(非原子,赋值)ABAddressBookRef addressBookRef;
//考虑到你的负载
ABAddressBookRequestAccessWithCompletion(self.addressBookRef,^(bool-grated,CFErrorRef-error){
如果(授予){
dispatch\u async(dispatch\u get\u main\u queue()^{
[self-getContactsFromAddressBook];
});
}否则{
//TODO:显示警报
}
});
-(无效)getContactsFromAddressBook
{
CFErrorRef error=NULL;
ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(NULL,错误(&R);
如果(通讯簿){
NSArray*所有联系人=(u_u桥u传输NSArray*)ABAddressBookCopyArrayFallPeople(addressBook);
整数i=0;

对于(i=0;i请提交此url:农场动物关闭的另一个有用的问题。请不要只发布一个链接,因为它可能过时。相反,请在答案中添加您需要说的内容。@trojanfoe ok,但请注意,原始问题要求“教程或博客链接”@Daniel谢谢,但此博客正在添加联系人,我想检索联系人并显示。请不要只发布一个链接,因为它可能会过时。相反,请在回答中添加您需要说的任何内容。@PJR谢谢,但此博客正在添加联系人,我想检索联系人并显示。@sofquestion我正在共享我的一个组件,其中将帮助您:@PJR感谢您共享代码,但我面临的问题与-我的姓名Hitesh联系人列表中有两个号码存储,但它只显示第一个号码。您能在这个问题上帮助我吗。@sofquestion请检查我的更新答案。@Ankit谢谢您-我在[arrContact addObject:dict]处收到错误信息;这是-使用未声明的未声明的'arrContat';您是指'allcontacts'吗?您能帮我解决这个问题吗?请先确定arrContact..像
NSMutableArray*myArr
非常感谢还有一个错误-[tblContact reloadData];未声明抱歉,我几天前才开始使用IOS,所以我没有太多知识。如果您能帮助我解决最后一个错误,这将非常棒。非常感谢。您能给出完整的正确示例吗?因为我是IOS新手
// Import two framework

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

// create a property

@property (nonatomic, assign) ABAddressBookRef addressBookRef;


// in view didLoad

ABAddressBookRequestAccessWithCompletion(self.addressBookRef, ^(bool granted, CFErrorRef error) {
    if (granted) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self getContactsFromAddressBook];
        });
    } else {
        // TODO: Show alert
    }
});


-(void)getContactsFromAddressBook
{
    CFErrorRef error = NULL;

    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    if (addressBook) {
        NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

        NSUInteger i = 0;
        for (i = 0; i<[allContacts count]; i++)  {
            //  myClass *shrObj = [[myClass alloc] init];
            ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];

            // Get first and last names
            NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

            NSString *lastName= (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);

            if (!lastName) {
                lastName=@"";
            }

            NSString *fullName = [NSString stringWithFormat:@"%@ %@",firstName,lastName];

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

            [dict setValue:fullName forKey:@"name"];

            // Get mobile number
            ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);

            if ([self getMobilePhoneProperty:phonesRef]!=nil) {

                [dict setValue:[self getMobilePhoneProperty:phonesRef] forKey:@"mobile"];
                [arrContact addObject:dict];

            }

            if(phonesRef) {
                CFRelease(phonesRef);
            }

        }

        [tblContact reloadData];
    }
    else
    {
        NSLog(@"Error");

    }
}

- (NSString *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef {
    for (int i=0; i < ABMultiValueGetCount(phonesRef); i++) {
        CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(phonesRef, 0);
        CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(phonesRef, 0);

        if(currentPhoneLabel) {
            if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) {
                return (__bridge NSString *)currentPhoneValue;
            }

            if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
                return (__bridge NSString *)currentPhoneValue;
            }
        }
        if(currentPhoneLabel) {
            CFRelease(currentPhoneLabel);
        }
        if(currentPhoneValue) {
            CFRelease(currentPhoneValue);
        }
    }

    return nil;
}