关于objective C:检查 NSURL 的 UTI / 文件类型

Check NSURL for UTI / file type

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

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

提前致谢!


这应该可以工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 方法。)


Swift 版本:

1
2
3
4
5
6
7
8
9
10
11
do {
    var value: AnyObject?
    try url.getResourceValue(&value, forKey:NSURLTypeIdentifierKey)
    if let type = value as? String {
        if UTTypeConformsTo(type, kUTTypeMovie) {
        ...
        }
    }
}
catch {
}

Swift 5 版本:

1
2
3
4
5
6
7
if let resourceValues = try? localUrl.resourceValues(forKeys: [URLResourceKey.typeIdentifierKey]) {
    if let typeId = resourceValues.typeIdentifier {
        if UTTypeConformsTo(type, kUTTypeMovie) {
            ...
        }
    }
}