0

设置了 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,但如果不添加后者,我的真实世界应用程序将无法编译。

4

1 回答 1

0

我遇到了同样的问题,并通过将我的方法签名更改为:

- (IBAction)acnPickerDoubleClick:(id __unsafe_unretained)sender {

它似乎奏效了。选择器视图层次结构中的实际发送者在调用操作时不能停留足够长的时间。我正在使用__unsafe_unretained,因为我的目标是 10.6+,但您可能能够摆脱__weak10.7+ 的项目。

于 2014-10-14T00:32:59.520 回答