我正在重构我的代码以使用 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,所有其他活动都运行良好。
任何人都知道这些 placeholderItems 的用途以及将它们设置为错误的类是否会产生任何负面影响?
对不起,这么久。我感谢您的帮助。