NSURL 子类,文件 URL,对于非 ASCII 文件名在 QuickLook 中不起作用?
NSURL subclass, with file URL, doesn't work in QuickLook, for non-ASCII filenames?
其中有很多部分,但据我所知,它们都是重现问题所必需的。
我创建了一个简单的 NSURL 子类,如下所示:
class URL2: NSURL { }
我用它制作了一个文件URL:
let f = URL2(fileURLWithPath: "/Users/me/Downloads/ついて.pdf")
然后我尝试从 previewPanel(panel:previewItemAtIndex index:)
返回它。
结果:我在 QLPreviewPanel 中得到一个通用文件图标(但它有正确的文件名)。
奇怪的是,如果我以不同的方式执行这些操作,它会起作用:
- 如果我使用普通
NSURL(fileURLWithPath: "/Users/me/Downloads/ついて.pdf")
,它会正确显示文件内容。
- 如果我使用纯 ASCII 文件名,它会正确显示文件内容。
- 如果我用 URL2 做其他事情(比如一些 NSFileManager 操作),它会很好地定位文件。
在这种情况下,我可能做错什么导致 QuickLook 对我的 NSURL 子类不满意?
子类化 NSURL(或 NSURLRequest)通常是一条疯狂的道路,这在很大程度上(我认为)要归功于在 OS.
的各个部分大量使用 NSXPC
我建议改为使用具有关联对象的类别。这应该避免您遇到的边缘情况,同时仍然允许您向 NSURL 对象添加自定义方法和属性。
其中有很多部分,但据我所知,它们都是重现问题所必需的。
我创建了一个简单的 NSURL 子类,如下所示:
class URL2: NSURL { }
我用它制作了一个文件URL:
let f = URL2(fileURLWithPath: "/Users/me/Downloads/ついて.pdf")
然后我尝试从 previewPanel(panel:previewItemAtIndex index:)
返回它。
结果:我在 QLPreviewPanel 中得到一个通用文件图标(但它有正确的文件名)。
奇怪的是,如果我以不同的方式执行这些操作,它会起作用:
- 如果我使用普通
NSURL(fileURLWithPath: "/Users/me/Downloads/ついて.pdf")
,它会正确显示文件内容。 - 如果我使用纯 ASCII 文件名,它会正确显示文件内容。
- 如果我用 URL2 做其他事情(比如一些 NSFileManager 操作),它会很好地定位文件。
在这种情况下,我可能做错什么导致 QuickLook 对我的 NSURL 子类不满意?
子类化 NSURL(或 NSURLRequest)通常是一条疯狂的道路,这在很大程度上(我认为)要归功于在 OS.
的各个部分大量使用 NSXPC我建议改为使用具有关联对象的类别。这应该避免您遇到的边缘情况,同时仍然允许您向 NSURL 对象添加自定义方法和属性。