Сбой приложения при использовании 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;
}
}