You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS中NSPersistentDocument内IBAction无法触发问题求助

问题描述

我最近开发一个macOS应用时遇到了棘手的问题:我给两个按钮关联了IBAction,但点击按钮时这些动作完全没触发。我已经尝试了各种方法排查,但还是没找到问题所在,肯定是漏了某个配置。另外,我之前做的一个基于NSPersistentDocument的同类应用就没有这个问题。

Document类相关代码

override func windowControllerDidLoadNib(_ windowController: NSWindowController) {
    super.windowControllerDidLoadNib(windowController)
    // 用户界面准备代码
    guard let context = self.managedObjectContext else {
        fatalError("context is nil")
    }
    mainObjectContext = context
    let mainWindowController = MainWindowController(nibName: NSNib.Name(rawValue: "MainWindowController"), bundle: nil)
    customView1.addSubview(mainWindowController.view)
    setUpLayoutConstraints(item: mainWindowController.view, toItem: customView1)
}

func setUpLayoutConstraints(item : NSView, toItem: NSView) {
    item.translatesAutoresizingMaskIntoConstraints = false
    let sourceListLayoutConstraints = [
        NSLayoutConstraint(item: item, attribute: .left, relatedBy: .equal, toItem: toItem, attribute: .left, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: item, attribute: .right, relatedBy: .equal, toItem: toItem, attribute: .right, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: item, attribute: .top, relatedBy: .equal, toItem: toItem, attribute: .top, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: item, attribute: .bottom, relatedBy: .equal, toItem: toItem, attribute: .bottom, multiplier: 1, constant: 0)]
    NSLayoutConstraint.activate(sourceListLayoutConstraints)
}

MainWindowController类相关代码

class MainWindowController: NSViewController {
    @objc var managedObjectContext: NSManagedObjectContext = mainObjectContext
    @objc dynamic var customSortDescriptors = [NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))];
    @IBOutlet weak var textFiled: NSTextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 视图设置
        print("hello")
        textFiled.stringValue = "hello"
    }
    
    @IBAction func actionAddNew(_ sender: Any) {
        print("add")
        textFiled.stringValue = "add"
    }
    @IBAction func actionRemove(_ sender: Any) {
        print("remove")
        textFiled.stringValue = "remove"
    }
}

内容的提问来源于stack exchange,提问作者thierryH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:35:49