2014-10-16 3 views
0

Я пытаюсь дать пользователю возможность выбрать номер телефона из своих контактов, а затем отобразить выбранный номер в UITextField.ABMultiValueIdentifier всегда 0 (Zero) ABPeoplePicker

Проблема в том, что возвращенный ABMultiValueIdentifier от 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 без предварительной аутентификации. Если вы это делаете, вам разрешено только доступ к данным для значения, выбранного пользователем - все остальные идентификаторы установлены на недействительные.

Попробуйте выполнить аутентификацию перед открытием ABPeoplePickerViewController и проверить, получаете ли вы правильные данные.

У меня была такая же проблема при попытке получить уменьшенное изображение для выбранного человека - без аутентификации это всегда было пустым.

+0

Привет, спасибо, но сейчас я тестирую на iOS 7.1, но это то, что я должен проверить, а затем – PaperThick

0

Оказывается, это был мой тестовый пользователь в моем телефоне, который был проблемой. У этого пользователя было 2 телефонных номера, оба из которых были установлены на «Мобильный». Кажется, что сборщик не видит различия между ними, если это так. Может ли кто-нибудь подтвердить это или я говорю из моей задницы?

Смежные вопросы