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

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

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

提前致谢!

【问题讨论】:

    标签: objective-c xcode macos video


    【解决方案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:stackoverflow.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) {
                  ...
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        相关资源
        最近更新 更多