Как отправить два разных массива и позволить контроллеру представления активности выбрать один в зависимости от выбранного приложения - PullRequest
0 голосов
/ 10 июля 2019

Рассказ:

Я хочу представить контроллер вида деятельности либо с массивом строк и URL, либо с массивом строк и UIImages. Первый массив, состоящий из комбинации строк и URL-адресов, отлично работает для большинства приложений, таких как Facebook, Twitter, iMessage и AirDrop. Единственная проблема в том, что приложение LINE (корейское чат-приложение, которое очень популярно в Японии) не принимает URL-адреса. Это должен быть массив NSString и UIImage. Кто-нибудь знает, как это можно сделать?

Длинная история:

Я представляю контроллер представления активности, чтобы поделиться комбинацией строки, изображения и видео через приложения, такие как Facebook, Twitter, Сообщение. Чтобы иметь возможность AirDrop, я отправляю контроллеру представления массив URL, который работает отлично. Все, что мне нужно сделать, это подготовить изображения и видео как временные файлы и отправить их пути.

Приведенный ниже код запускается на PageViewController, кнопка панели инструментов которого появляется над контроллером представления активности.

-(void) sharePreparedItems { 
    NSArray *sharedItems = [((MasterViewController*)[self.viewControllers objectAtIndex:0]) sharedItems];
    BOOL isSharingAsset = [((MasterViewController*)[self.viewControllers objectAtIndex:0]) isSharingAsset];

    if (sharedItems != nil) {
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:sharedItems applicationActivities:nil];
        activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
            if (isSharingAsset) { 
                [[NSNotificationCenter defaultCenter]postNotificationName:@"removeTemporaryMediaFiles" object:self];
            }
        };

        // Popover
        self.popoverPresentation = activityViewController.popoverPresentationController;
        [self.popoverPresentation setBarButtonItem:self.shareBarButtonItem];
        [self.popoverPresentation setPermittedArrowDirections:UIPopoverArrowDirectionDown];
        [self.popoverPresentation setDelegate:self];
        [self presentViewController:activityViewController animated:YES completion:nil];
    }
}

После представления контроллера представления MasterViewController подготавливает NSArray * sharedItems, уведомляет родительский контроллер представления и запускает этот метод. Нет проблем.

Проблема только в том, что приложение LINE не может обмениваться изображениями или видео таким образом. Очевидно, он не берет URL-адреса, и я должен передать ему UIImages. И я определенно не хочу иметь отдельную кнопку только для приложения.

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

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

...