Я пытаюсь поделиться некоторыми изображениями и видеороликами с другими приложениями (например, FB, WhatsApp), используя UIActivityViewController
. У меня есть подклассы UIActivityItemProvider
, а при вызове методов -(id)item
я обрабатываю файлы изображений/видео и сохраняю их в каталоге. Затем я возвращаю пути к файлам как NSURLs
. Моя проблема в том, что Я не могу найти способ отправки нескольких URL-адресов файлов одновременно.Обмен изображениями/видео в других приложениях через UIActivityViewController показывает общие элементы дважды в iOS
Ниже приведены подходы, которые я предпринял для возврата URL-адресов из метода (id);
NSArray
NSURL
объектов. НЕ РАБОТАЕТ. Когда появляется всплывающее окно целевого приложения, оно всегда пустое.- В качестве
NSDictionary
, в которомNSURL
объекты являются значениями и ключами, может быть что угодно. ПРОБЛЕМАТИКА: всплывающее окно целевого приложения показывает все элементы, но ДВАЖДЫ! Я много экспериментировал со словарем, но не смог найти способ решить эту проблему.
Просто возвращающий объект NSURL
от -(id)item
Метод работает отлично для одного файла. Но я должен поделиться несколькими пунктами. Массив не работает, Словарь дублирует общие элементы.
Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно?
UPDATE 1:
Это, как я показываю UIActivityViewController.
CustomItemProvider *provider = [[CustomItemProvider alloc] initWithPlaceholderItem:[UIImage imageNamed:@"ios-59.png"]];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[provider] applicationActivities:nil];
activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError)
{
if(completed)
{
NSLog(@"Activity Completed");
}
else
{
NSLog(@"Activity Cancelled");
}
};
[self presentViewController:activityViewController animated:YES completion:^{}];
Реализация UIActivityItemProvider приведена ниже; URL-адреса действительны, и в этих местах есть изображения/видео.
@interface CustomItemProvider : UIActivityItemProvider
@end
@implementation CustomItemProvider
- (id)item
{
NSURL *url1 = [NSURL fileURLWithPath:@"file one url"];
NSURL *url2 = [NSURL fileURLWithPath:@"file two url"];
NSURL *url3 = [NSURL fileURLWithPath:@"file three url"];
return @{@"item1":url1, @"item2":url2, @"item3":url3}; //As NSDictionary. This causes 6 items to be shared; all files twice.
//return @[url1, url2, url3]; //As NSArray
}
@end
ОБНОВЛЕНИЕ 2:
Связанный вопрос отличается. Я не хочу отправлять файлы непосредственно в UIActivityViewController как параметр в initWithActivityItems:
. Причина в том, что могут быть несколько видеофайлов, которые будут вызывать предупреждение о памяти и сбои. Кроме того, я буду манипулировать файлами перед отправкой в целевое приложение (в методе -(id)item
, который я здесь не показывал), поэтому мне нужно UIActivityItemProvider
для обработки файлов в фоновом режиме.
Это трудно догадаться, не видя, что вы на самом деле делаете. Как выглядит код ошибки? –
@PhillipMills, я отредактировал вопрос и добавил метод. – Suran
Возможный дубликат [Как разделить несколько файлов через UIDocumentInteractionController?] (Http://stackoverflow.com/questions/27655722/how-to-share-multiple-file-via-uidocumentinteractioncontroller) –