【问题标题】:Resetting MacOS Window Backing Store重置 MacOS 窗口后备存储
【发布时间】:2020-08-08 15:42:08
【问题描述】:

我正在构建一个 macOS 应用程序,它有一个自定义窗口(继承自 NSWindow),除此之外,还有一种自定义方式来调整它的大小。

在编写和调试调整大小代码的过程中,我不小心将窗口大小调整为任意大的值。没问题,我在想。我只是将代码恢复为正常工作。

但现在我在窗口加载之前就收到了这个错误:

2020-08-08 08:22:22.777588-0700 MyApp[1679:21967] -[<_NSViewBackingLayer: 0x600000c86220> display]: Ignoring bogus layer size (57500.000000, 57500.000000), contentsScale 2.000000, backing store size (115000.000000, 115000.000000)

我的窗口是 300x300 像素。不知何故,macOS 决定为我创建一个 115000x115000 的后备存储。此状态在重新启动后仍然存在。呃。

我有一个解决方法,就是在.xib 中专门设置一个新的标识符。因此,在我看来,系统致力于根据 id 维护我的窗口的状态。

当我的代码出现错误时,我宁愿修复根本原因,而不是累积一堆状态。

这个州在哪里举行?有什么办法可以重置吗?

【问题讨论】:

  • 一个 NSWindow 有一个后备存储类型。你的是什么?
  • 这是默认值,“缓冲”。其他类型似乎已被弃用:developer.apple.com/documentation/appkit/nswindow/…
  • 确实如此,但我想知道是否将其设置为另一个值,如 nonretained,是否是另一种解决方法。 — 当然,另一种可能性是丢弃为您维护应用程序状态而存储的缓存。你知道那在哪里,对吧?
  • 呃,不,我不知道那在哪里,这是我的核心问题。理想情况下,我希望我的应用能够强制将其清除。
  • 好吧,我不知道你的应用,但可能会清除它。删除 Xcode 的派生数据文件夹,同时删除应用程序保存的应用程序状态文件夹。如果您不知道它们在哪里,请搜索应用程序的捆绑包 ID 作为文件/文件夹名称。

标签: swift macos nswindow


【解决方案1】:

“后备商店”是一条红鲱鱼。问题只是保存的窗口大小。

您可以通过以下方式解决此问题:

defaults delete <your app's bundle ID> "NSWindow Frame <you window's autosave name>"

如果您不介意取消应用的所有偏好设置,您可以这样做:

defaults delete <your app's bundle ID>

或者,您可能需要删除应用的窗口恢复保存状态。对于非沙盒应用程序,它将位于 ~/Library/SavedApplicationState/.savedState。对于沙盒应用,它位于应用的容器中,位于 ~/Library/Containers//Data/Library/SavedApplicationState/.savedState。

【讨论】:

  • 默认读取 为空。也许是因为它没有真正安装?
  • 没有“真正安装”之类的东西。恢复保存状态(最后一段)呢?
  • 我确实在 ~/Library/Containers 中看到了我的 bundle ide,但在 ~/Libary/SavedApplicationState 中没有。我需要做一些工作来重现这个,但我想把这个问题留一点,以防有人知道如何以编程方式清理它。
猜你喜欢
  • 1970-01-01
  • 2014-01-05
  • 2021-04-15
  • 1970-01-01
  • 2016-01-22
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多