2014-10-16 7 views
0

사용자에게 연락처에서 전화 번호를 선택하고 선택한 번호를 UITextField에 표시 할 수있는 기능을 제공하려고합니다.ABMultiValueIdentifier는 항상 0입니다. (0) ABPeoplePicker

에서 shouldContinueAfterSelectingPerson으로 반환되는 연락처에 어떤 번호를 선택했는지에 관계없이 항상 0 인 문제가 있습니다.

- (IBAction)btnChooseContactClicked:(id)sender { 
    [[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]]; 
    [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];  

    [picker setDisplayedProperties: [NSArray arrayWithObjects: [NSNumber numberWithInt: kABPersonPhoneProperty], nil]]; 
    picker.peoplePickerDelegate = self; 

    [self presentModalViewController:picker animated:YES]; 
} 


- (void)peoplePickerNavigationControllerDidCancel: 
(ABPeoplePickerNavigationController *)peoplePicker 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 


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

    return YES; 
} 

- (BOOL)peoplePickerNavigationController: 
(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
           property:(ABPropertyID)property 
           identifier:(ABMultiValueIdentifier)identifier //Always = 0 
{ 
    [self displayPerson:person property:property identifier:identifier]; 
    [self dismissModalViewControllerAnimated:YES]; 
    return NO; 
} 

- (void)displayPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier 
{ 
    NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSLog(name); 

    if (property == kABPersonPhoneProperty) { 
     ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     for(CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) { 
      if(identifier == ABMultiValueGetIdentifierAtIndex (multiPhones, i)) { 
       CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); 
       CFRelease(multiPhones); 
       NSString *phoneNumber = (__bridge NSString *) phoneNumberRef; 
       CFRelease(phoneNumberRef); 
       self.txtTelNo.text = phoneNumber; 
      } 
     } 
    } 

} 

내가 다 잘 뭐하는 거지처럼 느낌이 나는 수많은 다른 사람을 따라하고 아무것도 작동하는 것 같다 없습니다 :

이 내 코드입니다. 무엇이 문제 일 수 있습니까?

답변

0

iOS8에는 먼저 인증하지 않고 ABPeoplePickerViewController를 사용할 수있는 옵션이 있습니다. 이 작업을 수행하는 경우 사용자가 선택한 값에 대해서만 데이터에 액세스 할 수 있습니다. 다른 모든 ID는 무효로 설정됩니다.

ABPeoplePickerViewController를 열기 전에 먼저 인증을 시도하고 올바른 데이터를 수신하고 있는지 확인하십시오.

내가 선택한 사람의 미리보기 이미지를 검색 할 때 동일한 문제가 발생했습니다. 인증하지 않고 항상 비어있었습니다.

+0

안녕하세요 고맙지 만 현재 iOS 7.1에서 테스트 중이지만 확인해야하는 사항입니다. – PaperThick

0

그것이 내 전화에서 내 테스트 사용자라는 것이 밝혀졌습니다. 이 사용자는 전화 번호가 2 개였으며 둘 다 '휴대 전화'유형으로 설정되었습니다. 이 경우 피커 캔트 (canter cant)의 차이점을 볼 수있는 것처럼 보입니다. 누구든지 이걸 확인할 수 있을까? 아니면 여기서 내 엉덩이에서 말하는거야?