对成员 'close()' 的引用不明确

Ambiguous reference to member 'close()'

我正在尝试创建一个应用程序,允许用户循环浏览文件夹中的 next/previous 文本文档文件,照片查看应用程序通常允许 next/previous 图片视图。到目前为止,在我看来,最有效的方法是替换当前打开的 window 中的文档。 my previous question on the topic 的编辑答案表明这确实是可能的。我希望能够使用文档架构来打开和保存;我不想概括框架,我试图保持简单。我尝试使用上一个问题中推荐的代码如下:

let prevDocument = windowController.document
let newDocument = Document(contentsOf: newURL, ofType: myDocumentType) // add do-catch
NSDocumentController.shared.addDocument(newDocument);
newDocument.addWindowController(windowController)
prevDocument.close()

但是当我这样做时,prevDocument.close() 命令给我一个奇怪的错误 "Ambiguous reference to member 'close()'"。 告诉我 "This kind of error appears when there's more than one variable/method with the same name"。好的,但是是哪些,我该如何解决?在 "ambiguous reference" 错误下方,我收到两条消息:"Found this candidate (Foundation.Stream)" 和 "Found this candidate (AppKit.NSBezierPath)"。简要查看 Foundation.Stream 和 NSBezierPath 的文档表明 Foundation.Stream 而不是 NSBezierPath 是我正在尝试使用的,但我不知道如何告诉系统(或者为什么 NSBezierPath 会第一时间参与)。

NSWindowControllerdocument 属性 具有类型 AnyObject?,因此为什么没有 close 方法并且编译器难以找出类型它可能是对象的一部分,这样它就可以有一个 close 方法。

点击 Xcode 中 document 属性 的文档(ctrl-cmd 单击)显示 document 属性 是通常是 NSDocument 类型,它有一个 close 方法。类型转换值得一试:

guard let prevDocument = windowController.document as? NSDocument else {
    // ...
}

// Rest of your code

或者,如果您可以保证您的应用程序一次只管理一个文档:

guard let previousDocument = NSDocumentController.shared.documents.first else {
    // ...
    return
}

// Rest of your code