我正在使用用戶輸入電話號碼的TextField。當TextField發生變化時,它應檢查此號碼是否已存在於電話簿中並顯示名稱。通過iPhone上的電話號碼獲取姓名
到目前爲止,我唯一的方法就是解析Dict中的所有名字和數字並從那裏讀取它。
有沒有更簡單,更高效,更復雜的方法來做到這一點?
我正在使用用戶輸入電話號碼的TextField。當TextField發生變化時,它應檢查此號碼是否已存在於電話簿中並顯示名稱。通過iPhone上的電話號碼獲取姓名
到目前爲止,我唯一的方法就是解析Dict中的所有名字和數字並從那裏讀取它。
有沒有更簡單,更高效,更復雜的方法來做到這一點?
通過用戶的地址簿並創建電話號碼映射到人員並不難。 Address Book Programming Guide列出了框架如何工作的所有信息。
要關閉,並在這裏完成這個問題是我的解決方案的主要組成部分:
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);
}
}
你需要釋放'vorname','nachname','phones'和'tmpNumber',因爲它們都是由名字中帶有'Copy'的函數產生的。另外,你明確地泄漏'tmpNumber'是因爲你得到一個帶有+1保留計數的對象的引用,當你運行'cleanupPhoneNumber:' – 2010-05-02 14:17:40
youre right時,它們立即失去引用,thx – 2010-05-02 19:58:02
我看不到的另一種方式了。但無論如何感謝 – 2010-05-02 06:11:40