【问题标题】:Why does ABPeoplePickerView crash on double click?为什么 ABPeoplePickerView 在双击时会崩溃?
【发布时间】:2014-05-30 17:51:26
【问题描述】:

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

【问题讨论】:

    标签: macos osx-mountain-lion abaddressbook abpeoplepickerview


    【解决方案1】:

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

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

    而且它似乎有效。选择器视图层次结构中的实际发送者在调用操作时不能停留足够长的时间。我使用 __unsafe_unretained 是因为我的目标是 10.6+,但您可能可以在 10.7+ 项目中使用 __weak

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 2011-04-17
      • 2020-11-11
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      相关资源
      最近更新 更多