Обработка действий ABPersonViewController со связанными контактами на iOS7

У меня возникла проблема с обработкой действия на ABPersonViewController, когда контроллер представления отображает объединенный контакт в iOS 7.

В приведенном ниже примере ABPersonViewController показал 7 строк для отображаемого контакта, но когда я выбираю ABMultiValueRef для свойства, он возвращает 8 строк, в которых первая строка была скрыта, поскольку она была дубликатом в этом комбинированном контакте.

Когда значение считывается для индекса, оно скрывается, поэтому все считанные значения равны одному значению, отображенному в ABPersonViewController.

-(BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{
   if (property == kABPersonPhoneProperty){

      ABMultiValueRef phone = ABRecordCopyValue(person, property);
      CFIndex theindex = ABMultiValueGetIndexForIdentifier(phone, identifier);
      NSString *selectedValue = (NSString *)ABMultiValueCopyValueAtIndex(phone, the index);

      // DO SOMETHING WITH THE SELECTED VALUE

      CFSafeRelease(phone);
      CFSafeRelease(selectedValue);

   }
return NO;
}

Есть ли способ получить правильное значение для индекса, когда контакты объединены, или есть способ получить MultiValueRef для свойства, которое фактически отображалось в ABPersonViewController?

2 ответа

Попробуй это:

 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
          shouldContinueAfterSelectingPerson:(ABRecordRef)person {

        ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
        phoneNumbers = (__bridge NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);

        NSLog(@"%@",phoneNumbers);
        CFRelease(phoneNumberProperty);
        return NO;

    }
ABPropertyType pt = ABPersonGetTypeOfProperty(property);
NSString *phoneNumber;
if ((pt & kABMultiValueMask) == kABMultiValueMask) {
        ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
        CFIndex idx = ABMultiValueGetIndexForIdentifier(phoneProperty, identifier);
        phoneNumber = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,idx);
        CFRelease(phoneProperty);
    } 
Другие вопросы по тегам