在获取到分享数据的NSItemProvider去解析数据时,使用系统提供了相应的API
// Returns YES if the item provider has at least one item that conforms to the supplied type identifier.
- (BOOL)hasItemConformingToTypeIdentifier:(NSString*)typeIdentifier;
判断UTI时,是从NSItemProvider中的registeredTypeIdentifiers列表中注册的UTI和自己需要的数据类型做对比:
[itemProvider hasItemConformingToTypeIdentifier:@"public.image"];
itemProvider获取到的图片UTI注册信息列表为@"public.image"
@"public.image"与registeredTypeIdentifiers注册UTI相同或者下级则返回YES,不同则返回NO.
但是在项目中发现选取iPhone文件中的PDF等文件时registeredTypeIdentifiers中包含的UTI会有多个
<NSItemProvider: 0x2807e6680> {types = (
"com.adobe.pdf",
"public.file-url"
)}
系统提供的API去判断无法确认是URL还是PDF,增加了判断逻辑的复杂性.
因此项目中不去系统API去做判断,而是使用CFStringRef的判断方法.
NSString *registered = itemProvider.registeredTypeIdentifiers.firstObject;
CFStringRef registeredType = (__bridgeCFStringRef)registered;
BOOL isContain = UTTypeConformsTo(registeredType, kUTTypePDF);
registeredTypeIdentifiers中获取最精准的UTI去做判断,这样就能更精准的定位文件类型.