NSCocoaErrorDomain Code=256 无法打开“md”格式的文件
NSCocoaErrorDomain Code=256 Cannot open files in the “md” format
我正在开发一个用于编辑文件的 macOS 应用程序,但在尝试使用 NSDocumentController.shared.makeDocument
从文件 URL 创建新的 NSDocument
实例时遇到了一个相当烦人的错误.
下面是我如何调用 makeDocument
的简单示例。磁盘上存在文件 test.md
。
let url = URL(fileURLWithPath: "/Users/me/Desktop/test.md"
do {
let newDocument = try NSDocumentController.shared.makeDocument(withContentsOf: url, ofType: url.pathExtension)
print("Created \(newDocument)")
} catch {
print("Error: \(error)")
}
问题是这个 try
调用失败并到达 catch
块。我得到的错误是:
Error: Error Domain=NSCocoaErrorDomain Code=256 "“test.md” could not be handled because MyApp cannot open files in the “md” format." UserInfo={NSLocalizedDescription=“test.md” could not be handled because MyApp cannot open files in the “md” format., NSLocalizedFailureReason= MyApp cannot open files in the “md” format.}
我相信我已经为降价文件正确设置了应用程序的文档类型,如下所示:
我已经尝试清理构建、删除派生数据并为降价文件添加 'Imported UTI' 类型,但似乎没有任何效果。
奇怪的是,通过“文件”>“打开”,我可以打开 .md
个文件,只是不能通过 makeDocument
.
以编程方式打开
使用来自 XCode 10 Info.plist 的示例及其设置验证生成的 Info.plist。
还要检查 lsregister 命令并查看您的应用程序是否已注册以处理 md.
lsregister(使用 switch dump 或 read man):
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
Markdown 文档:
<dict>
<key>CFBundleTypeName</key>
<string>Markdown Document</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>md</string>
<string>mdown</string>
<string>markdown</string>
<string>text</string>
</array>
<key>LSItemContentTypes</key>
<array>
<string>net.daringfireball.markdown</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>net-daringfireball-markdown</string>
</dict>
makeDocument(withContentsOf:ofType:)
需要一个类型作为第二个参数,而不是扩展名。查看 typeForContents(of url: URL)
如何从 URL.
派生类型
正如 Marek H 在他的回答中指出的那样,在 info.plist 中应该有一个用于文档类型的 UTI(标识符)。
我正在开发一个用于编辑文件的 macOS 应用程序,但在尝试使用 NSDocumentController.shared.makeDocument
从文件 URL 创建新的 NSDocument
实例时遇到了一个相当烦人的错误.
下面是我如何调用 makeDocument
的简单示例。磁盘上存在文件 test.md
。
let url = URL(fileURLWithPath: "/Users/me/Desktop/test.md"
do {
let newDocument = try NSDocumentController.shared.makeDocument(withContentsOf: url, ofType: url.pathExtension)
print("Created \(newDocument)")
} catch {
print("Error: \(error)")
}
问题是这个 try
调用失败并到达 catch
块。我得到的错误是:
Error: Error Domain=NSCocoaErrorDomain Code=256 "“test.md” could not be handled because MyApp cannot open files in the “md” format." UserInfo={NSLocalizedDescription=“test.md” could not be handled because MyApp cannot open files in the “md” format., NSLocalizedFailureReason= MyApp cannot open files in the “md” format.}
我相信我已经为降价文件正确设置了应用程序的文档类型,如下所示:
我已经尝试清理构建、删除派生数据并为降价文件添加 'Imported UTI' 类型,但似乎没有任何效果。
奇怪的是,通过“文件”>“打开”,我可以打开 .md
个文件,只是不能通过 makeDocument
.
使用来自 XCode 10 Info.plist 的示例及其设置验证生成的 Info.plist。 还要检查 lsregister 命令并查看您的应用程序是否已注册以处理 md.
lsregister(使用 switch dump 或 read man):
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
Markdown 文档:
<dict>
<key>CFBundleTypeName</key>
<string>Markdown Document</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>md</string>
<string>mdown</string>
<string>markdown</string>
<string>text</string>
</array>
<key>LSItemContentTypes</key>
<array>
<string>net.daringfireball.markdown</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>net-daringfireball-markdown</string>
</dict>
makeDocument(withContentsOf:ofType:)
需要一个类型作为第二个参数,而不是扩展名。查看 typeForContents(of url: URL)
如何从 URL.
正如 Marek H 在他的回答中指出的那样,在 info.plist 中应该有一个用于文档类型的 UTI(标识符)。