Обновление 2, я надеюсь, что это поможет кому-то, есть решения по следующей ссылке: https://discussions.apple.com/thread/5498630?start=0&tstart=0, очевидно, это ошибка iOS, и эта работа работает. Я могу создать новый sharedPicker, но я ничего не могу получить от него или отклонить, я не уверен, как форматировать за пределы того, что предоставляется по ссылке Любая помощь по этому поводу очень приветствуется.Ошибка приложения при использовании PeoplePicker, но не в том же виде
Так что мой вопрос в том, как взять следующий код и фактически создать код для 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;
}
Update 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;
}
}
И где именно он падает? Вероятно, вы не сохраняете некоторые переменные. –
Если я отредактирую этот код, мое приложение будет работать нормально, просто требуется ввести номера телефонов вручную. Что касается отладки, я получаю F, я не могу понять ничего, что говорит Xcode, и все, что я получаю сейчас, это lldb. Я вернусь и проверю свою экономию, но то, что убивает меня, я использую один метод для сохранения независимо от метода ввода, и даже если я просто подниму представление сборщика и не буду сохранять его, я могу отменить его, мое приложение будет по-прежнему сбой, когда я перехожу к этому конкретному виду. –
Дополнительная информация: У меня есть серия контроллеров, встроенных в контроллер навигации. С главного экрана я могу перемещаться в любом месте без проблем. Если я открою PeoplePicker на контроллере представления контактов, вернитесь домой, чтобы начать контакт, мое приложение выйдет из строя. Это происходит независимо от действий, предпринятых с PeoplePicker. Когда я снова открою приложение, он будет нормально работать на всех экранах, пока я снова не открою PeoplePicker? Является ли эта проблема выпуском релиза? –