为什么ABPeoplePickerView会在双击时崩溃?

时间:2014-05-30 17:51:27

标签: macos osx-mountain-lion abaddressbook abpeoplepickerview

设置了nameDoubleAction和target后,当您双击某个名称时,ABPeoplePickerView的行为与预期一致。还有一个属性列 - 您可以在属性检查器中在设计时添加电子邮件和电话等属性。即使对于多值属性,例如一个人的多个电话号码,它也能很好地工作。外观表明,即使您碰巧在属性列中单击,双击也应该有效。

但是我在现实世界的应用程序中发现,如果你在属性栏中双击该应用程序就会挂起。

// action called by double clicking on people picker or by OK button
- (IBAction)acnPickerDoubleClick:(id)sender {

执行挂起在上面一行,调试器报告EX_BAD_ACCESS,发送方为0x0。

我用最少的代码构建了四个测试应用程序。 2和4工作正常,1和3如上所述崩溃。就我所见,3和4是完全相同的,在几分钟之内创建;代码只是从一个复制到另一个。然而第一个崩溃,第二个很好。唯一的区别可能是我在Xib中创建事物的顺序,添加了AddressBook框架或编写了#imports。

另一个荒谬之处在于,我只需要为编译器导入AddressBook/AddressBook.h即可接受此行:

@property (strong) IBOutlet ABPeoplePickerView *picker;

似乎也没有必要导入AddressBook/ABPeoplePickerView.h,但我的真实世界应用程序在不添加后者的情况下将无法编译。

1 个答案:

答案 0 :(得分:0)

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

来修复它
- (IBAction)acnPickerDoubleClick:(id __unsafe_unretained)sender {

它似乎有效。在调用操作时,选择器视图层次结构中的实际发送方必须长时间保持不变。我正在使用__unsafe_unretained,因为我的目标是10.6 +,但您可以在10.7+项目中使用__weak