检查 NSURL 的 UTI / 文件类型

Posted

技术标签:

【中文标题】检查 NSURL 的 UTI / 文件类型【英文标题】:Check NSURL for UTI / file type 【发布时间】:2012-09-19 21:45:38 【问题描述】:

我正在构建一个允许用户将视频拖放到其上的应用。给定一个已删除 NSURL*s 的列表,我如何确保每个都符合 public.movie UTI 类型?

如果我有NSOpenPanel,我会使用openPanel.allowedFileTypes = @[@"public.movie"];,Cocoa 会帮我处理。

提前致谢!

【问题讨论】:

【参考方案1】:

这应该可行:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];

for (NSURL *url in urls) 
    NSString *type;
    NSError *error;
    if ([url getResourceValue:&type forKey:NSURLTypeIdentifierKey error:&error]) 
        if ([workspace type:type conformsToType:@"public.movie"]) 
            // the URL points to a movie; do stuff here
        
     else 
        // handle error
    

(您也可以使用UTTypeConformsTo() 代替NSWorkspace 方法。)

【讨论】:

你如何在 ios 上做到这一点? NSWorkspace 需要 AppKit,它仅在 macOS 上可用。谢谢。 找到了我自己的问题的答案 - 对于 iOS:***.com/a/5815629/1598906【参考方案2】:

Swift 版本:

do 
    var value: AnyObject?
    try url.getResourceValue(&value, forKey:NSURLTypeIdentifierKey)
    if let type = value as? String 
        if UTTypeConformsTo(type, kUTTypeMovie) 
        ...
        
    

catch 

【讨论】:

【参考方案3】:

Swift 5 版本:

if let resourceValues = try? localUrl.resourceValues(forKeys: [URLResourceKey.typeIdentifierKey]) 
    if let typeId = resourceValues.typeIdentifier 
        if UTTypeConformsTo(type, kUTTypeMovie) 
            ...
        
    

【讨论】:

以上是关于检查 NSURL 的 UTI / 文件类型的主要内容,如果未能解决你的问题,请参考以下文章

iOS 文档/文件类型关联 - 通配符 UTI?

带有 UIDocumentPickerViewController 的 iOS 自定义 UTI/文件类型

iOS UTI(统一类型标识)

在 iOS 中为 mime 类型或 UTI 类型使用内置图标

获取给定文件的文件类型 - 基于内容

如何使用 Xcode 11 在 UTI 部分配置 .app 文件?