Проблема с расширением общего доступа iOS при обмене изображениями из библиотеки фотографий
Ниже приведен код, который я использую для обмена изображениями в моем "ShareViewController.m".
NSExtensionItem *item = [self.extensionContext.inputItems objectAtIndex:i];
NSItemProvider *itemProvider = item.attachments.firstObject;
if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSData *data, NSError *error) {
NSLog(@"%@", data);
// the rest of uploading script goes here
}];
}
Все работает нормально, если я поделюсь изображением из WhatsApp. Но это не работает, если я хочу поделиться изображением из библиотеки фотографий или из Facebook Messenger.
Кто-нибудь знает, в чем может быть проблема?
Спасибо
1 ответ
Вот как я это решил. Я избавился от (NSString *)kUTTypeURL]
и добавил itemProvider.registeredTypeIdentifiers
получить массив со всеми доступными идентификаторами типов. Тогда я просто использую первый доступный как registeredTypeIdentifiers.firstObject
,
Кроме того, очень важно, NSData *data
изменился на id<NSSecureCoding> item
что делает его немного другим, чтобы получить NSData
от него. Это особенно важно при обмене изображениями из Messenger - они имеют идентификатор типа "public.image"
скорее, чем "public.jpeg"
или же "public.url"
как в библиотеке фотографий или WhatsApp.
NSExtensionItem *item = [self.extensionContext.inputItems objectAtIndex:i];
NSItemProvider *itemProvider = item.attachments.firstObject;
// get type of file extention (jpeg, file, url, png ...)
NSArray *registeredTypeIdentifiers = itemProvider.registeredTypeIdentifiers;
if ([itemProvider hasItemConformingToTypeIdentifier:registeredTypeIdentifiers.firstObject) {
[itemProvider loadItemForTypeIdentifier:registeredTypeIdentifiers.firstObject options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) {
NSData *imgData;
if([(NSObject*)item isKindOfClass:[NSURL class]]) {
imgData = [NSData dataWithContentsOfURL:(NSURL*)item];
}
if([(NSObject*)item isKindOfClass:[UIImage class]]) {
imgData = UIImagePNGRepresentation((UIImage*)item);
}
// the rest of uploading script goes here
}];
}