IOS AddressBook Contacts真实设备上的Null问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS AddressBook Contacts真实设备上的Null问题相关的知识,希望对你有一定的参考价值。

我从addressBook获得联系人,我在模拟器上测试它没有第一个或第二个名称null问题。

但是当我尝试在真实设备上测试它时,它会在很多行上给出第一个或第二个名称Null问题。请帮帮我,我的源代码是

- (void)getContactsWithAddressBook:(ABAddressBookRef )addressBook {
    contactList = [[NSMutableArray alloc] init];
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

    for (int i=0;i < nPeople;i++) {
        NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary];

        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);

        //For username and surname
        ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty));

        CFStringRef firstName, lastName;
        firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
        lastName  = ABRecordCopyValue(ref, kABPersonLastNameProperty);
        [dOfPerson setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"];

        //For Email ids
        ABMutableMultiValueRef eMail  = ABRecordCopyValue(ref, kABPersonEmailProperty);
        if(ABMultiValueGetCount(eMail) > 0) {
            [dOfPerson setObject:(__bridge NSString *)ABMultiValueCopyValueAtIndex(eMail, 0) forKey:@"email"];

        }

        //For Phone number
        NSString* mobileLabel;

        for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {
            mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
            if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
            {
                [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
            }
            else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
            {
                [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
                break ;
            }

        }
        [contactList addObject:dOfPerson];
    }

    NSLog(@"Contacts = %@",contactList);
}
答案

可能你没有这些联系人的名字/姓氏,所以你可以这样做

NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty)==nil?@"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);

NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)==nil?@"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

以上是关于IOS AddressBook Contacts真实设备上的Null问题的主要内容,如果未能解决你的问题,请参考以下文章

IOS获取系统通讯录联系人信息

通讯录

从 AddressBook.framework 生成 vCard

利用AddressBook.framework框架获取iOS系统通讯录数据

ios9-通讯录

IOS:#import <AddressBook/AddressBookUI.h> 文件未找到