ABRecordCopyValue только возвращает электронную почту Facebook для контактов и игнорирует других
Я пытаюсь сравнить электронные письма выбранного телефонного контакта с электронными письмами зарегистрированных пользователей в моем приложении, чтобы узнать, зарегистрированы ли они.
Это должно быть достаточно просто. Получите 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 ответ
Это то, что я сделал, вы можете увидеть, если ваш код похож - если нет, больше информации, чтобы предоставить вам:
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);
}