ios - ABAddressBookCopyArrayOfAllPeople 慢

标签 ios iphone xcode abaddressbook

我正在编写一个应用程序,我需要在其中读取用户的地址簿并显示他所有联系人的列表。我正在测试的 iPhone 有大约 100 个联系人,加载联系人确实需要很多时间。

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
ABMultiValueRef phones = NULL;
ABRecordRef person = NULL;
for (int i =0; i < allContacts.count; i++) {
    person = (__bridge ABRecordRef)([allContacts objectAtIndex:i]);
    if (person != nil) {
        phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        if (ABMultiValueGetCount(phones) == 0) {
            CFErrorRef error = nil;
            ABAddressBookRemoveRecord(addressBook, person, &error);
        }
        CFRelease(phones);
    }
}
CFErrorRef saveError = nil;
ABAddressBookSave(addressBook, &saveError);

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.view.backgroundColor=[UIColor clearColor];
picker.peoplePickerDelegate = self;
picker.delegate=self;
NSArray *displayedItems =
[NSArray arrayWithObject:[NSNumber
                          numberWithInt:kABPersonPhoneProperty]];
picker.displayedProperties = displayedItems;

最佳答案

您可以使用 performSelectorInBackground:withObject: 在后台线程中执行复制,这样它就不会影响主线程并且您不必在 UI 中等待。

关于ios - ABAddressBookCopyArrayOfAllPeople 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26829840/

相关文章:

iphone - Box2D xcode项目编译器错误“命令/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2失败,退出代码为1”

ios - 如何从周数和年份中获取日期

iphone - 如何使用控制核心音频中低音的 kAudioUnitType_Effect 的 kAudioUnitSubType_LowShelfFilter?

ios - 在未运行且 iBeacon 在范围内时调用应用程序

ios - 移动 map View 后如何保持用户位置居中

iphone - iOS 5 - 获取图像,如添加联系人按钮

iPhone应用程序 : Where do I put a config file?

iphone - NSPredicate 与 NSCompoundPredicate?

iphone - 使用 git 管理 phonegap/cordova 项目

xcode - 在 XCode beta 6.3 上安装 Alcatraz