使用号码搜索 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 上进行反向地理编码 - 获取准确的街道号码
excel表格导入到iphone里长串数字无法显示 如:手机号码 要怎么办