【问题标题】:NSTableView crash after reload重新加载后 NSTableView 崩溃
【发布时间】:2015-09-17 14:11:06
【问题描述】:

最近我遇到了以下问题。

我有一个NSTableView,每行都有按钮。现在,当单击按钮时,事件会转到服务器并返回,表会重新加载新数据。因此,如果您单击按钮两次,速度非常快,但您按住第二次单击,并且在释放单击表后将重新加载,因为第一个事件是应用程序崩溃,因为消息发送到已释放的行视图实例。我找到了这次崩溃的三种解决方案:

  1. 由于第一个事件,单击后禁用按钮并在重新加载表格时启用。
  2. 消息发送到按钮时更改事件(onMouseUp 到 onMouseDown)。
  3. 将所有行视图保留在附加数组中,以防止它们被释放,这是我认为最糟糕的一种,因为这样的数组增长得非常非常快。

启用僵尸对象后,我在崩溃时得到了以下信息: [RowView performSelector:withObject:]: message sent to deallocated instance 0x11177d1b0

我正在使用 ARC。

你们中有人知道如何解决这个问题吗?

【问题讨论】:

  • 你在使用完成块吗?你的数组是nonatomic吗?
  • 两个问题都是。

标签: objective-c macos nstableview


【解决方案1】:

我不允许用户在表已加载早期调用时进行干预。我会选择你的第一选择。

【讨论】:

  • 但是自从用户点击视图后,引用不应该保持未发布吗?在向视图发送消息之前释放它是可可的错误吗?
  • 第一个问题是。您能否以异常断点运行以找出根本原因。这绝对是代码问题,而不是可可错误。
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
相关资源
最近更新 更多