当我尝试从地址簿联系人中检索电话号码时,如果联系人有电子邮件地址,则结果始终为零。这显然是一个大问题......事实上,这么大,我很难相信我没有做错事。但是我所做的每一项测试 - 包括使用其他不相关的代码样本 - 都会得到相同的结果。
我已使用以下代码成功检索电子邮件地址:
+ (NSArray*)emailFromRecordRef:(ABRecordRef)personRef
{
ABMultiValueRef emailAddressesRef = ABRecordCopyValue(personRef, kABPersonEmailProperty);
NSArray* emailAddresses = nil;
if (emailAddressesRef != nil)
{
emailAddresses = [(NSArray*)ABMultiValueCopyArrayOfAllValues(emailAddressesRef) autorelease];
CFRelease(emailAddressesRef);
}
return emailAddresses;
}
...但是当我调整相同的代码来检索电话号码时:
+ (NSArray*)phoneNumbersFromRecordRef:(ABRecordRef)personRef
{
ABMultiValueRef phoneNumbersRef = ABRecordCopyValue(personRef, kABPersonPhoneProperty);
NSArray* phoneNumbers = nil;
if (phoneNumbersRef != nil)
{
phoneNumbers = [(NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumbersRef) autorelease];
CFRelease(phoneNumbersRef);
}
return phoneNumbers;
}
...它只检索没有电子邮件地址的用户的电话号码。如果他们有电子邮件地址,则不会返回电话号码。
有没有人成功检索过地址簿联系人的电话号码?
感谢。
答案 0 :(得分:2)
事实证明,我做错了什么。显然,您需要在请求电话号码等其他属性的整个过程中保持对AddressBook的引用(保留)。当我把它保持活着时,电话号码问题就消失了。