如何在 Xcode Interface Builder 中使用 Action Invocation
How do I use Action Invocation in Xcode Interface Builder
我在使用参数绑定时无法使 IB 操作调用工作。有人可以解释这是如何工作的。如果我不使用 Argument 绑定,则绑定有效,但使用 nil 参数调用该方法。我假设 Argument 绑定旨在设置将在方法调用中传递的参数。在我的例子中,我想获得对 Table Cell Views 对象的引用。
我收到如下编译器错误:
Exception while running ibtool: *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
我正在将操作调用绑定到 Table 单元格视图中的按钮。
解决方法:
在报表队列中Table视图控制器class:
- 在声明中添加协议
NSTableViewDelegate
。您不必实施任何方法。
- 为阵列控制器和 table 视图添加插座。
- 添加一个动作方法
@IBAction func cancelAction(_ sender: NSButton) {
let row = tableView.row(for: sender)
if let objects = arrayController.arrangedObjects as? [String] {
let object = objects[row]
cancel(object)
}
}
在 IB 中:
- 连接插座。
- 将 table 视图的委托连接到报表队列 Table 视图控制器。
- 将按钮的操作连接到报告队列 Table 视图控制器的
cancelAction
。
- 删除按钮操作绑定。
我在使用参数绑定时无法使 IB 操作调用工作。有人可以解释这是如何工作的。如果我不使用 Argument 绑定,则绑定有效,但使用 nil 参数调用该方法。我假设 Argument 绑定旨在设置将在方法调用中传递的参数。在我的例子中,我想获得对 Table Cell Views 对象的引用。 我收到如下编译器错误:
Exception while running ibtool: *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
我正在将操作调用绑定到 Table 单元格视图中的按钮。
解决方法:
在报表队列中Table视图控制器class:
- 在声明中添加协议
NSTableViewDelegate
。您不必实施任何方法。 - 为阵列控制器和 table 视图添加插座。
- 添加一个动作方法
@IBAction func cancelAction(_ sender: NSButton) {
let row = tableView.row(for: sender)
if let objects = arrayController.arrangedObjects as? [String] {
let object = objects[row]
cancel(object)
}
}
在 IB 中:
- 连接插座。
- 将 table 视图的委托连接到报表队列 Table 视图控制器。
- 将按钮的操作连接到报告队列 Table 视图控制器的
cancelAction
。 - 删除按钮操作绑定。