【发布时间】: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 作为文件/文件夹名称。