Сбой приложения при использовании PeoplePicker, но не в том же виде

Обновление 2, надеюсь, это кому-нибудь поможет, есть решения по следующей ссылке:https://discussions.apple.com/thread/5498630?start=0&TSTART = 0 Очевидно, это ошибка iOS, и этот обходной путь работает. Я могу создать новый sharedPicker, но не могу ничего получить или отклонить, яЯ не уверен, как форматировать за пределы того, что предоставляется по ссылке Любая помощь в этом очень приветствуется.

Итак, мой вопрос сейчас заключается в том, как взять следующий код и создать код для peoplePickerNavigationControllerDidCancel: и peoplePickerNavigationController: shouldContinueAfterSelectingPerson: Спасибо. Я'Мы оставили большую часть моего первоначального поста на тот случай, если у кого-то возникла похожая неопределенная проблема.

// Convoluted workaround for the iPhone 4S crash
+ (ABPeoplePickerNavigationController *)sharedPeoplePicker {
    static ABPeoplePickerNavigationController *_sharedPicker = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedPicker = [[ABPeoplePickerNavigationController alloc] init];
    });
    return _sharedPicker;
}
// then later on, use 
[YourController sharedPeoplePicker].delegate = self;
// etc.

Мой текущий код:

- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier
{
    [self displayPerson:person];
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
    return NO;

}
- (void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController *)peoplePicker
{

    //[self dismissViewControllerAnimated:YES completion:nil];
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)pick1:(id)sender
{
    ABPeoplePickerNavigationController *picker1 =[[ABPeoplePickerNavigationController alloc] init];
    picker1.peoplePickerDelegate = self;

    [self presentViewController:picker1 animated:YES completion:nil];

    x=1;
}

Обновление 1, это приложение вылетает на iPhone 4 / 4s, но работает на симуляторе и iPhone5, если это что-то значит. Я'Я думаю, что просто у них достаточно силы, чтобы преодолеть любую утечку, которую я создал

У меня есть приложение iOS с контроллером представления, где пользователь может выбирать контакты для приложения, используяABPeoplePickerNavigationController или введите цифры вручную. Если числа вводятся вручную, проблем нет. Если пользователь открывает и:

Выбирает новый контакт из адресной книги

Обновляет контакт из адресной книги для использования в приложении

Открывает и отменяет адресную книгу (все без сохранения действия)

Тогда я не могу перейти к одному конкретному представлению в моем приложении без сбоев. Я в недоумении, почему я не могу перейти к этому одному контроллеру представления, или почему это вызывает сбой.

Я использую 5 разных сборщиков, по одному на каждый контакт, который я хочу добавить и, возможно, сохранить. Я сохраняю какNSUserDefaults, но, как я уже сказал, сбой сохраняется, даже если выбор средства выбора никогда не сохраняется. Я могу переходить ко всем представлениям в приложении из боковой панели без происшествий, единственное, что отличается от представления, на котором я отказываюсь, это то, что оно представлено с одного из контроллеров основного представления, а не с моей боковой панели.

Я ценю любую помощь или мысли. Это было первое приложение, которое я написал, и яЯ пытаюсь обновить его и не удается. Я хочу, чтобы он снова заработал, чтобы я мог вернуться и провести рефакторинг.

Моя реализация:

    - (IBAction)pick1:(id)sender
{
    ABPeoplePickerNavigationController *picker1 =
    [[ABPeoplePickerNavigationController alloc] init];
    picker1.peoplePickerDelegate = self;

    [self presentViewController:picker1 animated:YES completion:nil];
    x = 1;
}
- (IBAction)pick2:(id)sender
{
    ABPeoplePickerNavigationController *picker2 =
    [[ABPeoplePickerNavigationController alloc] init];
    picker2.peoplePickerDelegate = self;

    [self presentViewController:picker2 animated:YES completion:nil];
    x=2;
}
- (IBAction)pick3:(id)sender
{
    ABPeoplePickerNavigationController *picker3 =
    [[ABPeoplePickerNavigationController alloc] init];
    picker3.peoplePickerDelegate = self;

    [self presentViewController:picker3 animated:YES completion:nil];
    x=3;
}
- (IBAction)pick4:(id)sender
{
    ABPeoplePickerNavigationController *picker4 =
    [[ABPeoplePickerNavigationController alloc] init];
    picker4.peoplePickerDelegate = self;

    [self presentViewController:picker4 animated:YES completion:nil];
    x=4;
}
- (IBAction)pick5:(id)sender
{
    ABPeoplePickerNavigationController *picker5 =
    [[ABPeoplePickerNavigationController alloc] init];
    picker5.peoplePickerDelegate = self;

    [self presentViewController:picker5 animated:YES completion:nil];
    x=5;
}
- (void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController *)peoplePicker
{
    [self dismissViewControllerAnimated:YES completion:nil];
}


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

    [self displayPerson:person];
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];


    return NO;
}

- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier
{
    return NO;
}
- (void)displayPerson:(ABRecordRef)person
{
    NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person,
                                                                    kABPersonFirstNameProperty);


    NSString* phone = nil;
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,
                                                     kABPersonPhoneProperty);
    if (ABMultiValueGetCount(phoneNumbers) > 0) {
        phone = (__bridge_transfer NSString*)
        ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
    } else {
        phone = @"[None]";
    }
    if (x==1){
        firstName1.text = name;
        contact1.text = phone;
    }
    if (x==2){
        firstName2.text = name;
        contact2.text = phone;
    }
    if (x==3){
        firstName3.text = name;
        contact3.text = phone;
    }
    if (x==4){
        firstName4.text = name;
        contact4.text = phone;
    }
    if (x==5){
        firstName5.text = name;
        contact5.text = phone;
    }

}

Ответы на вопрос(3)

Ваш ответ на вопрос