无法读取kABPersonPhoneProperty

时间:2011-12-25 17:51:27

标签: objective-c ios cocoa abaddressbook

我正面临一个(奇怪的)问题:我想检索一个联系人的电话号码,但出于某种原因,我无法这样做。

我用过

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]);


愿有人向我解释我做错了什么吗?我正在使用Snow Leopard和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建议的解决方案似乎更好。

1 个答案:

答案 0 :(得分:17)

这只是猜测,但我会尝试保持地址簿处于打开状态,直到您完成阅读。也就是说,在阅读完所有电话号码之前,请不要致电CFRelease(addressBook);

地址簿更像是一个数据库,而不是一个平面文件,在联系人记录中阅读可以提供对其他字段的参考。数据而不是所有实际的内容。