Twitter在使用多个UIActivityProvider类时缺席

时间:2013-06-26 14:33:42

标签: ios uiactivityviewcontroller uiactivity

我正在重构我的代码以使用UIActivitiy和UIActivityProvider。我遇到了一个问题,其中Twitter在UIActivityViewController中没有显示出来。

我发现如果不止一个UIActivityProvider类将PlaceholderItem分配给UIImage类对象,Twitter就不会显示。没有其他活动似乎受活动无法使用的占位符类的影响。

对于上下文,这里有一些设置代码:

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:

  

可以代表您计划创建的实际对象的对象。对象的内容可能为空,但对象的类必须与您计划稍后提供的对象的类匹配。

显然,这对我来说不适用于推特。作为一个实验,我将所有placeholderItems更改为空NSStrings和Twitter,所有其他活动都运行良好。

任何人都知道这些placeholderItem用于什么,以及将它们设置为错误的类会产生任何负面影响吗?

对不起,这太久了。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

活动会查看您提供的每种类型的数量。 Twitter似乎每张推文仅支持1张图片。因此,如果您将多个提供程序与图像占位符放在一起,而不是只是任意选择其中一个图像,活动视图控制器根本不显示twitter。 您似乎无法解决此问题,以根据activityType更改共享项目的数量或类型。