0

我正在尝试将所选电话联系人的电子邮件与我的应用程序中注册用户的电子邮件进行比较,以查看他们是否已注册。

它应该足够简单。获取recordRef,复制邮件multiValue,然后比较:

-(void) checkForUser:(ABRecordRef) person {

    ABMultiValueRef contactEmails = ABRecordCopyValue(person, kABPersonEmailProperty);
    NSLog(@"emails are %@", contactEmails); // seeing error in log

    ...
    // check the emails against registered users. 

这在大多数情况下都很有效。问题来自统一的联系人。例如,我的联系人是与我的 Facebook、家庭、工作电子邮件的统一记录,所有这些都在一个联系人中。当我运行它checkUser:时,ABRecordRef它只显示我的 Facebook 电子邮件,即使还有其他 4 个。

我在想这是一个错误。我错过了一些关于统一卡的东西吗?

4

1 回答 1

0

这就是我所做的,您可以查看您的代码是否相似 - 如果是,则没有更多信息可以为您提供:

ABMutableMultiValueRef multiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
//CFShow(multiValue);
if(multiValue) {
    for(CFIndex j=0; j<ABMultiValueGetCount(multiValue); ++j) {
        //CFShow(ABMultiValueCopyLabelAtIndex(multiValue, j) );
        CFStringRef label = ABMultiValueCopyLabelAtIndex(multiValue, j);
        if(![emailKey isEqualToString:(__bridge NSString *)label]) {
            CFRelease(label);
            continue;
        }
        CFRelease(label);

        CFStringRef string = ABMultiValueCopyValueAtIndex(multiValue, j);
        NSString *finalStr = CFBridgingRelease(string);

        NSArray *array = [finalStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
        if([array count] == 3)  finalStr = (NSString *)[array objectAtIndex:1];

        [data replaceObjectAtIndex:emailAddress withObject:finalStr];
        break;
    }
    CFRelease(multiValue);
}
于 2013-07-03T17:50:28.993 回答