Обработка действий 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);
}