Откуда мы знаем, что делается с объектами данных, переданными в UIActivityViewController?

Например, в документации для UIActivityTypeAirDrop указано

При использовании этой службы вы можете предоставить объекты NSString, NSAttributedString, UIImage, ALAsset и NSURL в качестве данных для элементов действия. Вы также можете указать объекты NSURL, содержимое которых использует схему библиотеки ресурсов. Вы также можете предоставить объекты NSArray или NSDictionary, которые содержат перечисленные типы данных.

Но откуда нам знать, что именно будет сделано с каждым из объектов данных? Нам просто нужно экспериментировать, чтобы узнать? То же самое для других типов UIActivity, ни один из них не говорит, что конкретно делается с объектами.


person Marty    schedule 23.09.2013    source источник


Ответы (1)


К сожалению, документация для этого контроллера не настолько исчерпывающая, и подробностей по этому поводу не так много. Эксперименты - это в значительной степени то, чем я закончил. Однако некоторые из них имеют здравый смысл, например, «Сохранить в фотопленку», требующий объекта изображения. Большинство других попытаются использовать все, что вы им дадите (URL, текст, изображение и т. д.).

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

person Dima    schedule 23.09.2013
comment
На самом деле, при использовании UIActivityItemSource вам необходимо убедиться, что тип класса объекта, возвращаемый методом протокола placeholderItem, соответствует типу класса возвращаемого значения из itemForActivityType. Поэтому вместо этого вам следует создать один объект UIActivityItemSource для каждого типа, который вы хотите поддерживать, а затем, в зависимости от выбранной активности, вернуть nil в методе itemForActivityType. Просто убедитесь, что для любого выбранного действия хотя бы один из объектов UIActivityItemSource возвращает ненулевое значение, иначе могут произойти плохие вещи. - person ccjensen; 25.09.2013
comment
Правильный. Хорошее дополнение. - person Dima; 25.09.2013