使用多个 UIActivityProvider 类时没有 Twitter

Posted

技术标签:

【中文标题】使用多个 UIActivityProvider 类时没有 Twitter【英文标题】:Twitter absent when using multiple UIActivityProvider classes 【发布时间】:2013-06-26 14:33:41 【问题描述】:

我正在重构我的代码以使用 UIActivitiy 和 UIActivityProvider。我遇到了一个问题,Twitter 不再出现在 UIActivityViewController 中。

我发现如果我的多个 UIActivityProvider 类将 PlaceholderItem 分配给 UIImage 类对象,Twitter 将不会显示。 Activity 无法使用的占位符类似乎不会影响其他 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 作为可行的 Activity 服务?我的供应商会根据活动类型来确定谁可以提供图片。

文档是这样说 placeholderItem 的:

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

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

有谁知道这些 placeholderItem 的用途以及将它们设置为错误的类是否会产生负面影响?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用多个 UIActivityProvider 类时没有 Twitter的主要内容,如果未能解决你的问题,请参考以下文章

2019-11-29-C#-直接创建多个类和使用反射创建类的性能

多个类中 使用@PostConstruct,加载先后顺序

如何使用 dlib 训练或合并多个 .svm 并检测多个类

如何在 PHP 中使用多个类

使用多个类和链表

在 Qt 中使用多个 Ui 和 Ui 类?