【发布时间】:2013-10-02 08:31:50
【问题描述】:
此代码适用于 iOS5/iOS6,但不适用于 iOS7。
CFErrorRef *error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
//ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);
for(int i = 0; i < numberOfPeople; i++) {
ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );
NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
// NSLog(@"Name:%@ %@", firstName, lastName);
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSString *phoneNumber;
for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {
phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);
// NSLog(@"phone:%@", phoneNumber);
}
【问题讨论】:
-
在 iOS 7 上会发生什么?
-
CFArrayRef 不返回数组。总是返回一个空数组
-
你是在模拟器上还是在设备上测试?我注意到 iOS 模拟器默认没有联系人。当我添加一个时,很明显该代码确实适用于 iOS 6 和 7。
-
帕斯克,你是对的!难以置信,但只有在更新到 XCODE 5.0.2 之后,模拟器的通讯录是空的!之前,您始终可以使用标准联系人“John Appleseed”等测试您的应用程序。现在您必须在每次重置模拟器时手动插入自己的地址!
-
我在这里发布了 Swift 版本:stackoverflow.com/a/33219114/745161