0

我正在使用用户键入电话号码的 TextField。当 TextField 发生变化时,它应该检查这个号码是否已经在电话簿中并显示姓名。

到目前为止,我唯一的方法是解析字典中的所有名称和数字并从那里读取。

有没有更简单、更有效和更复杂的方法来做到这一点?

4

2 回答 2

0

翻阅用户的通讯录并创建电话号码到人员的映射并不难。地址簿编程指南列出了有关框架如何工作的所有信息。

于 2010-05-02T05:34:47.530 回答
0

要在此处关闭并完成此问题是我的解决方案的主要部分:

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);
    }
}
于 2010-05-02T09:54:02.837 回答