Кто-нибудь знает, как получить Домашний адрес из multiaddress в iOS? У меня есть разрешение от пользователя и всего остального, но проблема в том, что мне нужен только домашний адрес.Я получаю несколько адресов контакта, но хочу только Домашний адрес
ABAddressBookRef addressBook = ABAddressBookCreate();
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessGranted = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}
else { // we're on iOS 5 or older
accessGranted = YES;
}
if (accessGranted) {
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0 ; i < nPeople ; i++)
{
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
// First Name
NSString *fName = (__bridge NSString*)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
// Last Name
NSString *lName = (__bridge NSString*)ABRecordCopyValue(ref, kABPersonLastNameProperty);
// Phone
ABMultiValueRef phoneMultiValue = ABRecordCopyValue(ref, kABPersonPhoneProperty);
CFArrayRef allPhones = ABMultiValueCopyArrayOfAllValues(phoneMultiValue);
NSMutableArray *phoneData = [NSMutableArray arrayWithArray:(__bridge NSArray*) allPhones];
// Email
ABMultiValueRef emailMultiValue = ABRecordCopyValue(ref, kABPersonEmailProperty);
CFArrayRef allEmails = ABMultiValueCopyArrayOfAllValues(emailMultiValue);
NSMutableArray *emailData = [NSMutableArray arrayWithArray:(__bridge NSArray*) allEmails];
// Address
ABMultiValueRef addressMultiValue = ABRecordCopyValue(ref, kABPersonAddressProperty);
CFArrayRef allAddresses = ABMultiValueCopyArrayOfAllValues(addressMultiValue);
NSMutableArray* addressData = [NSMutableArray arrayWithArray:(__bridge NSArray*) allAddresses];
for (int j = 0 ; j < [addressData count]; j++) {
if ([[addressData objectAtIndex:j] count] > 0) {
if ([fName length] > 0 || [lName length] > 0) {
if ([fName length] > 0) {
[dic setObject:fName forKey:@"FirstName"];
}
if ([lName length] > 0) {
[dic setObject:lName forKey:@"LastName"];
}
if ([phoneData count] > 0) {
[dic setObject:phoneData forKey:@"MultiplePhoneNumbers"];
}
if ([emailData count] > 0) {
[dic setObject:emailData forKey:@"MultipleEmails"];
}
[dic setObject:addressData forKey:@"MultipleAddresses"];
}
}
}
NSUInteger keyCount = [[dic allKeys] count];
if (keyCount > 0) {
ABRecordID recId = ABRecordGetRecordID(ref);
[dic setObject:[NSString stringWithFormat:@"%d",recId] forKey:@"ABRecordRef"];
[dic setObject:[NSString stringWithFormat:@"%d",i] forKey:@"ab_id"];
[dic setObject:[NSNumber numberWithBool:FALSE] forKey:@"is_coordinate_fetch"];
[array addObject:dic];
}
Я был бы очень признателен, если бы кто-нибудь мог занять время и решить это для меня.
Я сделал это, сохранив multipleaddresses в массиве, а затем подбирая по домашнему адресу из этого массива по objectatindex: 0 который всегда возвращает домашний адрес и objectatindex: 1 возвращает рабочий адрес, если есть какой-либо рабочий адрес, иначе он вернет ошибку ..... –
Полезно знать! Я никогда не смотрел, имеет ли индекс значение. Единственная проблема, которую я вижу, - это если HOME не установлен, то добавляется другой адрес, поэтому индекс в индексе 0 - это бизнес. Вероятно, это действительно маловероятное событие. –