Objective c IOS 8-ABPeoplePickerNavigationController-取消委托方法有效,其他方法无效

Objective c IOS 8-ABPeoplePickerNavigationController-取消委托方法有效,其他方法无效,objective-c,ios8,abpeoplepickerview,Objective C,Ios8,Abpeoplepickerview,我在IOS 8 people picker委托代码中遇到了一个奇怪的问题。只有 - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker; { [self dismissViewControllerAnimated:YES completion:NULL]; } 方法正在被调用。我回顾了其他问题,并通过调用旧的IOS 7方法对IOS 8委

我在IOS 8 people picker委托代码中遇到了一个奇怪的问题。只有

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController    *)peoplePicker;
{
    [self dismissViewControllerAnimated:YES completion:NULL];
}
方法正在被调用。我回顾了其他问题,并通过调用旧的IOS 7方法对IOS 8委派方法进行了重要更改,以选择联系人

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:   (ABMultiValueIdentifier)identifier {
    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
}
但它从未被称为

我正在调用viewcontroller didLoad中设置代理

它在ios 7中工作得非常好。这是一个故事板应用程序

我在这里的评论中看到了同样的问题:

但从未找到答案。显然是我的错,但我找不到

更新:根据要求,以下是我如何设置代理:

self.picker = [[ABPeoplePickerNavigationController alloc] init];
self.picker.peoplePickerDelegate = self;
在@interface中:

@interface TreatmentsAddEntryTVC :    UITableViewController<UITextViewDelegate,ABPeoplePickerNavigationControllerDelegate>
@接口处理SaddentryTVC:UITableViewController

尝试改用此委托方法,看看它是否符合:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person;
{
   // yes the below line is deprecated as of iOS 8
   [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person];
}

我讨厌回答我自己的问题,尤其是当答案毫无意义时,但令人感动:

self.picker = [[ABPeoplePickerNavigationController alloc] init];
self.picker.peoplePickerDelegate = self;
从didLoad到我实际想要显示选择器的方法修复了这个问题。我已经看到了至少一个关于这一行为的其他问题:


对于使用iOS 8.1的项目, 我替换了这个方法

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ 
}
用这个

-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person{
}

当我选择了一个联系人时,新方法成功了。

您是否在视图控制器的.h文件中的“
@interface
”声明中添加了“
”?此外,您应该编辑问题以显示如何在视图控制器中设置委托。将声明更改为:“
@interface-TreatmentsAddEntryTVC:UITableViewController
”,然后看看会发生什么。@MichaelDautermann-不起作用,idk当调用一个委托而其他委托不起作用时会发生什么!我面临着同样的问题,我尝试了你在这里提到的方法,你找到了其他的解决方法吗?如果有,请分享。很抱歉延迟回答-我只能告诉你这些。如果您仍然陷于困境,我将很乐意通过我的旧代码挖掘任何可能有用的东西。