我正面臨一個(奇怪的)問題:我想檢索一個聯繫人的電話號碼的數量,但由於某種原因,我無法。無法讀取kABPersonPhoneProperty
我用
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *contacts = (NSArray*) ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);
把所有的觸點陣列。然後我想用
ABMultiValueRef ref = ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);
NSLog(@"%d",ref==NULL);
但ABRecordCopyValue
總是返回nil
...
注意到,我能夠檢索其它信息有關的接觸:例如,提取名稱中使用
CFStringRef name = ABRecordCopyCompositeName([contacts objectAtIndex:i]);
工作正常
有人可以解釋我我做錯了什麼嗎?我使用的是雪豹和Xcode 4.2和我正在開發適用於iOS 4.0 ...
編輯:我發現了一個解決方案:而不是使用
ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);
我用
ABRecordID idRec = ABRecordGetRecordID([contacts objectAtIndex:i]);
ABMultiValueRef ref = ABRecordCopyValue(ABAddressBookGetPersonWithRecordID(addressBook, idRec), kABPersonPhoneProperty);
不過,我必須保持對addressBook
的引用(不要釋放它),因此EricS建議的解決方案似乎更好。
它應該工作。嘗試使用不同的多值,例如'kABPersonEmailProperty'。難道你所測試的每個人都沒有電話號碼?此外,沒有什麼,我會建議寫'NULL == ref';反過來,不小心留下一個等號不會產生錯誤,並且會產生令人誤解的結果。 :) – matt 2011-12-25 18:04:30
沒有改變。在我的通訊簿中,只有兩個測試聯繫人:第一個有兩個號碼和一個電子郵件,而第二個有一個電話號碼,沒有電子郵件。在這兩種情況下,它返回零... – Saphrosit 2011-12-25 18:16:18
你解決了嗎? – matt 2011-12-26 17:36:35