通过iPhone上的电话号码获取姓名
问题描述:
我正在使用用户输入电话号码的TextField。当TextField发生变化时,它应检查此号码是否已存在于电话簿中并显示名称。通过iPhone上的电话号码获取姓名
到目前为止,我唯一的方法就是解析Dict中的所有名字和数字并从那里读取它。
有没有更简单,更高效,更复杂的方法来做到这一点?
答
要关闭,并在这里完成这个问题是我的解决方案的主要组成部分:
ABAddressBookRef m_addressbook = ABAddressBookCreate();
if (!m_addressbook) {
NSLog(@"opening address book");
}
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
[.....]
adressList = [[NSMutableDictionary alloc] init];
for (int i=0;i < nPeople;i++) {
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
vorname = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
nachname = ABRecordCopyValue(ref, kABPersonLastNameProperty);
nameTag = [NSString stringWithFormat:@"%@ %@.", vorname, nachname];
ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty);
// Loop thru all numbers of a person
for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {
tmpNumber = (NSString*)ABMultiValueCopyValueAtIndex(phones, i);
tmpNumber = [self cleanupPhoneNumber:tmpNumber];
[adressList setObject: nameTag forKey:tmpNumber];
NSLog(@"Name: %@ | Phone: %@", nameTag, tmpNumber);
}
}
+0
你需要释放'vorname','nachname','phones'和'tmpNumber',因为它们都是由名字中带有'Copy'的函数产生的。另外,你明确地泄漏'tmpNumber'是因为你得到一个带有+1保留计数的对象的引用,当你运行'cleanupPhoneNumber:' – 2010-05-02 14:17:40
+0
youre right时,它们立即失去引用,thx – 2010-05-02 19:58:02
我看不到的另一种方式了。但无论如何感谢 – 2010-05-02 06:11:40