【发布时间】:2012-09-19 21:45:38
【问题描述】:
我正在构建一个允许用户将视频拖放到其上的应用。给定一个已删除 NSURL*s 的列表,我如何确保每个都符合 public.movie UTI 类型?
如果我有NSOpenPanel,我会使用openPanel.allowedFileTypes = @[@"public.movie"];,Cocoa 会帮我处理。
提前致谢!
【问题讨论】:
标签: objective-c xcode macos video
我正在构建一个允许用户将视频拖放到其上的应用。给定一个已删除 NSURL*s 的列表,我如何确保每个都符合 public.movie UTI 类型?
如果我有NSOpenPanel,我会使用openPanel.allowedFileTypes = @[@"public.movie"];,Cocoa 会帮我处理。
提前致谢!
【问题讨论】:
标签: objective-c xcode macos video
这应该可行:
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 方法。)
【讨论】:
NSWorkspace 需要 AppKit,它仅在 macOS 上可用。谢谢。
Swift 版本:
do {
var value: AnyObject?
try url.getResourceValue(&value, forKey:NSURLTypeIdentifierKey)
if let type = value as? String {
if UTTypeConformsTo(type, kUTTypeMovie) {
...
}
}
}
catch {
}
【讨论】:
Swift 5 版本:
if let resourceValues = try? localUrl.resourceValues(forKeys: [URLResourceKey.typeIdentifierKey]) {
if let typeId = resourceValues.typeIdentifier {
if UTTypeConformsTo(type, kUTTypeMovie) {
...
}
}
}
【讨论】: