所以我有一个方法可以从iPhone的通讯录中获取所有联系电话号码,但是否有一种方法可以获取电话号码标签?例如,您可以执行以下操作:
我想修改我的方法以打印出标签(例如iPhone/Home/mobile等)。
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex n = ABAddressBookGetPersonCount(addressBook);
for( int i = 0 ; i < n ; i++ )
{
ABRecordRef ref = CFArrayGetValueAtIndex(all, i);
NSString *firstName = (NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
NSLog(@"Name %@", firstName);
ABMultiValueRef *phones = ABRecordCopyValue(ref, kABPersonPhoneProperty);
for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
{
NSString *phoneLabel = @""; // ???
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
//CFRelease(phones);
NSString *phoneNumber = (NSString *)phoneNumberRef;
CFRelease(phoneNumberRef);
NSLog(@" - %@ (%@)", phoneNumber, phoneLabel);
[phoneNumber release];
}
}
id CFBridgingRelease( CFTypeRef )
和它的补充函数CFTypeRef CFBridgingRetain( id )
。 - devios1CFBridgingRelease
(或__bridge_transfer
)之后,您不想对它们调用CFRelease
,因为这样做的整个目的是将释放责任转移给 Objective-C 对象。 - devios1错误:无法使用类型为'CFTypeRef'(又名'const void *')的rvalue初始化变量类型为'CFStringRef'(又名'const __CFString *') ... CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones,j);
- FouadCFRelease(phones);
吗? - newenglander