【问题标题】:windowShouldClose reporting unresolved identifierwindowShouldClose 报告未解析的标识符
【发布时间】:2016-06-30 16:26:43
【问题描述】:

我正试图在窗口关闭时触发我的 CoreData 的保存,因为它只是一个单一的窗口应用程序。

我的 viewDidLoad 和 viewDidAppear 中有以下代码

 override func viewDidLoad() {
    super.viewDidLoad()
    if windowShouldClose(self) {
       saveValues()
    }

}

override func viewDidAppear() {
    super.viewDidAppear()
    self.view.window?.delegate = self
}

但我仍然收到以下错误

Use of unresolved identifier 'windowShouldClose'

关于为什么在将窗口委托声明为 self 后我仍然收到此错误的任何建议?

【问题讨论】:

  • “windowShouldCLose”中的大“L”是这里还是您的代码中的错字?
  • 只是一个错字,我的错!
  • 永远不要自己调用代理方法,包括willdidshould。它们由操作系统调用。实现委托方法并将您的代码放在那里。
  • 所以如果我想在关闭窗口时发生一些事情,这是不可能的吗?
  • @chrono 如果您希望在关闭窗口时发生某些事情,请将您的代码放入适当的委托方法中。为什么要在加载视图时调用 windowShouldClose?从框架的角度来看没有任何意义。

标签: swift macos core-data


【解决方案1】:

viewDidLoad中设置委托

override func viewDidLoad() {
   super.viewDidLoad()
   self.view.window?.delegate = self
}

并实现委托方法

func windowWillClose(notification: NSNotification) {
   saveValues()
}

windowShouldClose 不同。它请求关闭窗口的权限并期望一个布尔返回值。

【讨论】:

  • 这成功了。我不得不将 self.view.window?.delegate = self 放入 viewDidAppear() 中,但是一旦我这样做了,一切都会按预期触发!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多