设置了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
,但我的真实世界应用程序在不添加后者的情况下将无法编译。
答案 0 :(得分:0)
我遇到了同样的问题并通过将我的方法签名更改为:
来修复它- (IBAction)acnPickerDoubleClick:(id __unsafe_unretained)sender {
它似乎有效。在调用操作时,选择器视图层次结构中的实际发送方必须长时间保持不变。我正在使用__unsafe_unretained
,因为我的目标是10.6 +,但您可以在10.7+项目中使用__weak
。