我正在尝试为我准备发布的 macOS 应用程序制作 Apple 帮助手册。但是,我正在尝试使锚点在我的 HTML 中工作。按照苹果的定义:
“锚点允许您唯一标识帮助手册中的主题。当用户点击指向锚点的链接时,帮助查看器会加载包含锚点的页面。......您还可以使用锚点从应用程序中加载锚定页面:调用 NSHelpManager 方法 openHelpAnchor:inBook: ..."
苹果的例子:<a name="ArrivalTimesUsingStopID"></a>
在我的 Apple 中,我有一个 NSAlert,它具有以下代码来显示帮助按钮,以便当您单击它时,它会打开指定的锚字符串。
alert.showsHelp = true
alert.helpAnchor = NSHelpManager.AnchorName(stringLiteral: "ArrivalTimesUsingStopID")
运行代码确实会显示帮助按钮,并且 Mac 帮助确实会打开,但是会出现一个错误,指出找不到指定的内容。不知道为什么锚不工作,因为如果我转到帮助菜单并从那里打开它,我可以访问帮助手册。
此外,Apple 的文件指出:
NSAlert、SFChoseIdentityPanel、SFCertificatePanel 类为对话框提供帮助按钮。要显示此类帮助按钮并将其链接到帮助手册中的锚点,请在这些类中使用方法 setShowsHelp: 和 setHelpAnchor:。
以及这些属性的文档NSAlert
状态:
-setShowsHelp:YES 向警报面板添加帮助按钮。当按下帮助按钮时,首先咨询代表。如果委托没有实现 alertShowHelp: 或返回 NO,则 -[NSHelpManager openHelpAnchor:inBook:] 使用 nil book 和 -setHelpAnchor: 指定的锚点调用,如果有的话。如果委托返回 NO 并且没有设置帮助锚点,则会引发异常。
...所以我知道我正在正确使用这两个。
我还了解每次更新 Apple 帮助手册 HTML 文档时都需要创建一个 .helpindex 文件。我正在使用 developer.apple.com 上的 Additional Xcode Tools 中的“Help Indexer.app”。我确保:
- 我设置了索引所有锚点的选项。
- 任何带有锚点的 HTML 页面都
<meta name="ROBOTS" content="ANCHORS">
在标题中,因此锚点会被编入索引。 - 我的 Apple 帮助书 plist 文件正确指向由“Help Indexer.app”创建的 .helpindex 文件。
但即使有了所有这些,我也无法将 Apple 帮助书打开到正确的锚点,甚至无法打开 Apple 帮助书的标题页。
从封面到封面多次,我无法在网上找到解决方案或任何地方。
我也尝试过手动打开它,但它只是打开相同的错误,说无法使用以下代码找到指定的内容:
let bookName = Bundle.main.object(forInfoDictionaryKey: "CFBundleHelpBookName") as! String
NSHelpManager.shared.openHelpAnchor("ArrivalTimesUsingStopID", inBook: bookName)
使用nil
inBook 参数也不起作用:
NSHelpManager.shared.openHelpAnchor("ArrivalTimesUsingStopID", inBook: nil)
有任何想法吗?