使用号码搜索 iPhone 地址簿

Posted

技术标签:

【中文标题】使用号码搜索 iPhone 地址簿【英文标题】:iPhone AddressBook Search Using number 【发布时间】:2015-12-21 10:29:09 【问题描述】:

我可以使用电话号码搜索联系人姓名。但是存在一些问题。例如,如果地址簿中的号码有国家代码和号码,如果我只搜索号码,它会返回 emty 值。所以它不能搜索正确的方法。这是我所做的代码片段。

- (ABRecordRef)findRecord:(NSString *)phnNumber

if (phnNumber == nil)
    return nil;



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

if (!addressBook) 
    NSLog(@"null");
 else if (error) 
  NSLog(@"error %@",error);

// Requests access to address book data from the user
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) );


CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(addressBook);


CFIndex n = ABAddressBookGetPersonCount(addressBook);
ABRecordRef record;

int count = 0;

for( int i = 0 ; i < n ; i++ )

    ABRecordRef ref = CFArrayGetValueAtIndex(all, i);

    ABMultiValueRef phones = ABRecordCopyValue(ref, kABPersonPhoneProperty);

    for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
    

        CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);

        NSString *newPhoneNumber = (__bridge NSString *)phoneNumberRef;

        NSLog(@"%@",newPhoneNumber);

        if([newPhoneNumber isEqualToString:phnNumber])
        
            record = ref;

            i=(int)n;
            count = 1;
        
        CFRelease(phoneNumberRef);
    



if(count != 1)

    ABRecordRef newPerson = ABPersonCreate();

    ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);

    ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)(phnNumber), kABHomeLabel, NULL);

    ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil);
    CFRelease(multiPhone);
    record = newPerson;



return record;

我这样称呼它的名字:

ABRecordRef record = [self findRecord:@"Number_here"];

if(record)

    NSString *name =(__bridge NSString *)ABRecordCopyCompositeName(record);

    lbCalleName.text=name;

我的问题是-假设我有一个联系人并且电话号码类似于8801723432323,并且我正在使用此01723432323 进行搜索,并且上面的代码返回 emty。这里 88 是国家代码。我也需要对面工作。假设我给定的号码有国家代码,而地址簿中没有国家代码。

【问题讨论】:

【参考方案1】:

替换此行

 if([newPhoneNumber isEqualToString:phnNumber]) 

if ([newPhoneNumber containsString:phnNumber]) 适用于 ios8 及更高版本,NSRange range = [newPhoneNumber rangeOfString:phnNumber]; if (range.length != 0) 适用于早期设备。 containsString: 在 iOS8 中引入。

【讨论】:

【参考方案2】:

您可以使用[newPhoneNumber containsString:phnNumber] 代替[newPhoneNumber isEqualToString:phnNumber],但您还应该更改您的逻辑,因为 containsString 方法可以匹配多个数字。

【讨论】:

我想你不明白我的意思。我告诉了如何查看国家代码。假设我给定的号码有国家代码而地址簿中没有国家代码,那么会发生什么?我需要两个都工作。 试试这两个库:github.com/iziz/libPhoneNumber-iOSgithub.com/googlei18n/libphonenumber。

以上是关于使用号码搜索 iPhone 地址簿的主要内容,如果未能解决你的问题,请参考以下文章

将 iPhone 电话号码格式转换为“可拨号”字符串

在 iPhone 上进行反向地理编码 - 获取准确的街道号码

excel表格导入到iphone里长串数字无法显示 如:手机号码 要怎么办

[JavaScript 刷题] 搜索 - 电话号码的字母组合, leetcode 17

利用谷歌地图采集外贸客户的电话和手机号码

Google一些关键词的运用