Загрузка нескольких изображений из расширения Share

В настоящее время у меня установлено расширение общего доступа, которое загрузит изображение, выбранное из приложения «Фото», на сервер. Это работает отлично, используя приведенный ниже код.

int fileNum=10; NSItemProvider *attachment = inputItem.attachments[0]; if ([attachment hasItemConformingToTypeIdentifier:(NSString*)kUTTypeImage]) { [attachment loadItemForTypeIdentifier:(NSString*)kUTTypeImage options:nil completionHandler:^(id item,NSError *error) { if (item) { NSLog (@"image %@",item); //upload image here NSData *data=[NSData dataWithContentsOfURL:item]; activityRecord.activityType=@"Images"; AppRecord *appRecord=[[AppRecord alloc] init]; appRecord.fileName=[NSString stringWithFormat:@"activity_%@%i(%i).jpg",activityRecord.supplierID,activityRecord.activityID,fileNum]; appRecord.fileBytes=data; [fileRecords addObject:appRecord]; activityRecord.activityFiles=fileRecords; [[Settings getInstance] uploadActivityRecord:activityRecord withDelegate:self]; [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; } }]; } 

У меня была предыдущая проблема, когда метод loadItemForTypeIdentifier не вызывался, и он был разрешен путем вызова completeRequestReturningItems в блоке завершения. Проблема, которую я сейчас имею в том, что, если я хочу загрузить несколько файлов, мне нужно вызвать loadItemForTypeIdentifier в цикле for (для каждого изображения), но как я могу это сделать, если метод completeRequestReturningItems будет вызываться после первого изображения / элемента?

Много спасибо Пол

One Solution collect form web for “Загрузка нескольких изображений из расширения Share”

Недавно я столкнулся с той же проблемой и смог ее решить, добавив счетчик и подсчитав, когда изображения успешно завершили свой блок. В loadItemForTypeIdentifier завершения loadItemForTypeIdentifier я затем проверяю, были ли вызваны все элементы перед вызовом completeRequestReturningItems в блоке dispatch_once (только ради безопасности).

 __block NSInteger imageCount; static dispatch_once_t oncePredicate; NSItemProvider *attachment = inputItem.attachments[0]; if ([attachment hasItemConformingToTypeIdentifier:(NSString*)kUTTypeImage]) { [attachment loadItemForTypeIdentifier:(NSString*)kUTTypeImage options:nil completionHandler:^(NSData *item ,NSError *error) { if (item) { // do whatever you need to imageCount --; if(imageCount == 0){ dispatch_once(&oncePredicate, ^{ [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; }); } } }]; } 

Я не могу сказать, что я чувствую, что это слишком элегантное решение, поэтому, если кто-то знает более подходящий способ справиться с этим распространенным случаем использования, я бы хотел услышать об этом.

  • Уведомление о запросе Facebook не отображается в мобильном сафари для iOS, но в приложении для родных facebook
  • Swift iOS App Facebook SDK 4.0 по методам входа / выхода из системы не выполняется
  • Неожиданно обновлять другое приложение
  • Отдельное время из формата NSDate, например, строки?
  • iOS Google map SDK: настройка уровня MaxZoom при использовании Tiles
  • Admob iOS: получение com.google.DummyAdapter на реальном устройстве, работа с симулятором
  • IOS Facebook SDK 3.1 :: вход с fb ios sdk 3.1: только openActiveSession делает вход в приложение
  • Может ли Firebase работать в автономном режиме с помощью React Native?
  • Как проверить подлинность устройства iOS
  • Устранение неполадок с помощью диспетчера viewModalViewControllerAnimated
  • Неопределенные символы для архитектуры armv7 при использовании Google-Maps-iOS-SDK (1.8.1)
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.