Проблема с расширением общего доступа 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

   }];
}
Другие вопросы по тегам