ABRecordCopyValue仅返回联系人的Facebook电子邮件并忽略其他人

时间:2013-07-02 21:31:56

标签: ios abrecord abperson

我正在尝试将所选手机联系人的电子邮件与我应用中注册用户的电子邮件进行比较,以确定他们是否已注册。

应该很简单。获取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个。

我在想这是一个错误。我错过了统一卡片的一些内容吗?

1 个答案:

答案 0 :(得分: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);
}