1

ビュー コントローラーが iOS 7 でマージされた連絡先を表示しているときに、ABPersonViewController でのアクションの処理に問題があります。

以下の例では、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;
}

連絡先が結合されたときにインデックスの正しい値を取得する方法はありますか、または ABPersonViewController に実際に表示されたプロパティの MultiValueRef を取得する方法はありますか?

4

2 に答える 2

0

これを試して :

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

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

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

    }
于 2014-05-20T14:41:52.397 に答える
0
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);
    } 
于 2014-05-20T14:33:36.900 に答える