2015-06-30 2 views
0

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

Протокол объявлен: Переменная

@interface MyTrackDetailsTVC() <UITextFieldDelegate,UIImagePickerControllerDelegate,ABPeoplePickerNavigationControllerDelegate> 

экземпляра определяется:

@property (strong, nonatomic) ABPeoplePickerNavigationController *picker; 

процесс, инициированный с кнопкой TAP:

- (IBAction)importContactTapped:(UIButton *)sender 
{ 
    self.picker = [[ABPeoplePickerNavigationController alloc] init]; 

    self.picker.peoplePickerDelegate = self; 

    [self presentViewController:self.picker animated:YES completion:nil]; 
} 

Отменить метод работает просто отлично:

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker 

{ 
    [[peoplePicker presentingViewController]dismissViewControllerAnimated:YES completion:nil]; 
} 

Метод выбора, который никогда не вызывался (проверено с точками перерыва).

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier 
{ 
    NSString *fName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    NSData *imgData = (__bridge_transfer NSData *)ABPersonCopyImageData(person); 

    self.nameField.text = [NSString stringWithFormat:@"(%@ %@",fName,lName]; 
    self.phoneField.text = lName; 

    self.imageView.image = [UIImage imageWithData:imgData]; 

    [[peoplePicker presentingViewController]dismissViewControllerAnimated:YES completion:nil]; 
} 

ответ

1

Метод peoplePickerNavigationController:didSelectPerson:property:identifier: делегат вызывается, когда выбран определенный объект на контакт. Если вы хотите узнать, когда выбран контакт, используйте метод делегата peoplePickerNavigationController:didSelectPerson:.

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person 
{ 
    NSString *fName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    NSData *imgData = (__bridge_transfer NSData *)ABPersonCopyImageData(person); 

    self.nameField.text = [NSString stringWithFormat:@"(%@ %@",fName,lName]; 
    self.phoneField.text = lName; 

    self.imageView.image = [UIImage imageWithData:imgData]; 

    [[peoplePicker presentingViewController]dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Фантастический. Спасибо, что поймали это! – C6Silver

+0

@rmaddy как позвонить и то и другое? – user1324887