4

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 にあります。UIImage をプレースホルダー クラスとして識別する別の UIActivityProvider があります。

カスタム アイテム プロバイダーの目的は、クラスが UIActivityViewContrrler の起動後にどのデータを提供するかを決定できるようにすることだと考えていました。私の場合、スクリーンショット プロバイダーは Twitter に何も提供していません。iOS が私のプレースホルダーを見て、Twitter を実行可能なアクティビティとして提供しないという決定を下すのはなぜですか? 私のプロバイダーは、アクティビティの種類に基づいて、誰が画像を提供できるかを分類します。

ドキュメントでは、placeholderItem について次のように述べています。

作成しようとしている実際のオブジェクトの代わりになるオブジェクト。オブジェクトの内容は空でもかまいませんが、オブジェクトのクラスは、後で提供する予定のオブジェクトのクラスと一致する必要があります。

明らかに、これは Twitter に関して私にとってはうまくいきません。実験として、すべての placeholderItems を空の NSStrings と Twitter に変更すると、他のすべてのアクティビティが正常に実行されました。

これらの placeholderItems が何のために使用され、それらを間違ったクラスに設定すると悪影響があるかどうかを知っている人はいますか?

すみません、これはとても長いです。私はあなたの助けに感謝します。

4

1 に答える 1