2013-06-26 2 views
4

Я пересматриваю свой код для использования UIActivitiy и UIActivityProvider. Я столкнулся с проблемой, когда Twitter больше не отображался в UIActivityViewController.Twitter отсутствует при использовании нескольких классов UIActivityProvider

Я обнаружил, что Twitter не появится, если более чем один из моих классов UIActivityProvider назначил PlaceholderItem объекту класса UIImage. Никакая другая деятельность, по-видимому, не затрагивается классами-заполнителями, которые не может использовать Activity.

Для контекста, вот некоторые из кода установки:

NSArray *applicationActivities = @[reviewActivity, myEmailActivity]; 
NSArray *excludeActivities = @[UIActivityTypeAssignToContact, 
           UIActivityTypePrint, 
           UIActivityTypeSaveToCameraRoll, 
           UIActivityTypePostToWeibo]; 

UIActivityItemProvider *screenshotProvider = [[ScreenshotActivityProvider alloc] initWithView :self.scrollView]; 
UIActivityItemProvider *textProvider = [[TextActivityProvider alloc] initWithExchangeDoc:self.docItem]; 
UIActivityItemProvider *imageProvider = [[ImageActivityProvider alloc] initWithExchangeDoc:self.docItem]; 
NSArray *activityItems = @[textProvider, screenshotProvider, imageProvider]; 
                     applicationActivities:applicationActivities]; 
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems 
                     applicationActivities:applicationActivities]; 

Образец UIActivityItemProvider я использую:

- (id)initWithExchangeDoc :(ExchangeDoc *)docItem 
{ 
    self = [super initWithPlaceholderItem:[UIImage new]]; 
    _docItem = docItem; 
    return self; 
} 

- (id)item 
{ 
    if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     return self.docItem.thumbImage; 
    } else { 
     return nil; 
    } 
} 

Проблема заключается в initWithPlaceholderItem. У меня есть другой UIActivityProvider, который идентифицирует UIImage как класс-заполнитель.

Я думал, что целью поставщиков пользовательских товаров было то, что мой класс мог решить после запуска UIActivityViewContrller какие данные были отправлены. В моем случае мой поставщик скриншотов ничего не предоставляет для Twitter. Почему iOS смотрит на мой заполнитель и принимает решение не обслуживать Twitter как жизнеспособную деятельность? Мои провайдеры будут сортировать, кто получает поставку изображения, основанного на типе активности.

Документов сказать о placeholderItem:

Объект, который может стоять в течение фактического объекта, который вы планируете создать. Содержимое объекта может быть пустым, но класс объекта должен соответствовать классу объекта, который вы планируете предоставить позже.

Очевидно, что это не работает для меня в отношении Twitter. В качестве эксперимента я сменил все placeholderItems на пустые NSStrings и Twitter, и все другие действия прекратились.

Кто-нибудь знает, для чего используются эти placeholderItems, и может ли их установка в неправильном классе иметь какой-либо негативный эффект?

Извините, что так долго. Я ценю вашу помощь.

ответ

0

Мероприятия показывают, сколько из каждого типа вы предоставляете. Кажется, что Twitter поддерживает только 1 изображение за твит. Поэтому, если вы помещаете несколько поставщиков с местами размещения изображений, а не просто выбираете одно из изображений для твита произвольно, контроллер вида активности просто не отображает твиттер вообще. Не отображается, вы можете обходить это, чтобы изменить количество или тип разделяемых объектов в зависимости от вида activityType.