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

如何判断NSWindow是否用于文档版本浏览器UI右侧的版本展示?

判断OS X版本浏览器中窗口是否展示旧版本内容的方法

要区分版本浏览器里的主编辑窗口(左侧)和旧版本预览窗口(右侧堆叠),可以通过以下几种可靠的方式:

方法1:检查NSDocument的version属性

在OS X 10.7及以上系统中,NSDocument提供了version属性:

  • 主窗口(左侧)的文档:document.version 为 nil(因为它是当前正在编辑的版本)
  • 旧版本预览窗口(右侧)的文档:document.version 会返回对应的 NSDocumentVersion 实例,代表该窗口展示的历史版本

你可以在代码中这样判断:

if (document.version != nil) {
    // 这个窗口展示的是旧版本内容
} else {
    // 这是主编辑窗口(左侧)
}

方法2:利用窗口通知与文档状态结合

虽然你已经知道主窗口会收到进入/退出版本浏览的通知,但可以结合文档的isBrowsingVersions属性和窗口的关系来判断:

  • 主窗口的文档调用 isBrowsingVersions 返回 YES
  • 旧版本预览窗口的文档调用 isBrowsingVersions 返回 NO,因为它们是独立的快照文档,不属于正在浏览版本的主文档上下文

代码示例:

if (![document isBrowsingVersions] && [NSDocumentController sharedDocumentController].versionBrowser != nil) {
    // 当前窗口是版本浏览器中的旧版本预览窗口
}

方法3:检查文档的文件路径(备选方案)

旧版本的快照文档会被存储在系统的版本管理目录中(通常是 ~/Library/Application Support/com.apple.versioner/ 下的子目录),你可以通过文档的fileURL来判断:

NSURL *fileURL = document.fileURL;
NSString *versionerPath = @"~/Library/Application Support/com.apple.versioner/";
if ([fileURL.path hasPrefix:[versionerPath stringByExpandingTildeInPath]]) {
    // 该窗口展示的是旧版本内容
}

注意:这个方法依赖系统目录结构,未来可能有变化,建议优先使用前两种方法。

另外,如果你需要监听窗口是否成为旧版本预览窗口,可以结合NSWindowDidBecomeMainNotification通知,在通知回调中检查上述条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:02