设置了 nameDoubleAction 和 target 后,ABPeoplePickerView 在双击名称时会按预期运行。还有一个属性列 - 您可以在设计时在属性检查器中添加电子邮件和电话等属性。它工作得相当好,即使对于多值属性,例如一个人的多个电话号码。外观表明,即使您碰巧单击了属性列,双击也应该起作用。
但是,我在实际应用程序中发现,如果双击属性列,应用程序会挂起。
// action called by double clicking on people picker or by OK button
- (IBAction)acnPickerDoubleClick:(id)sender {
执行挂起在上面的行,调试器报告 EX_BAD_ACCESS 和 sender 是 0x0。
我用最少的代码构建了四个测试应用程序。2 和 4 工作正常,1 和 3 崩溃如上。据我所知,3 和 4 是相同的,它们是在几分钟内创建的;代码只是从一个复制到另一个。然而第一个崩溃了,第二个很好。唯一的区别可能是我在 Xib 中创建内容、添加 AddressBook 框架或编写#imports 的顺序。
另一个荒谬的是,我只需要导入AddressBook/AddressBook.h
编译器就可以接受这一行:
@property (strong) IBOutlet ABPeoplePickerView *picker;
似乎也不需要导入AddressBook/ABPeoplePickerView.h
,但如果不添加后者,我的真实世界应用程序将无法编译。