更新 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;
}
}