4

UIActivityViewControllerのカスタム サブクラスでを使用していUIActivityItemProviderます。私のプロバイダーUIActivityTypeは、次のシーケンスを実行する場合を除いて、利用可能にしたいすべてのもので問題なく動作します。

  1. 表示するUIActivityViewController
  2. AirDrop を使用して別のデバイスと共有する
  3. 別のデバイスに正常に共有したら、電子メールを送信して共有します

誤った動作は、NSStringインスタンスを提供するテキスト プロバイダーがあり、それらが電子メールの件名と本文に表示されないことです。メール作成ダイアログには、テキスト プロバイダーから提供された件名と本文が含まれている必要があります。

このシーケンスを実行すると、コンソールに次の警告が表示されます。

2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <MyActivityItemProvider: 0x170296620> は無視されました (重複、実行中、または終了)

2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <TestActivityItemProvider: 0x170480a00> は無視されました (重複、実行中、または終了)

2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <WonderfulActivityItemProvider: 0x1704b7760> は無視されました (重複、実行中、または終了)

各警告は、UIActivityItemProvider私が提供した警告の 1 つに対応しています。これらのプロバイダー内で、- (id)itemメソッドは次のように実装されます。

- (id)item
{
    if ([self.activityType isEqualToString:UIActivityTypeMail]) {
        return @"MyMailString";
    }
    return @""; // placeholder item
}

この種の実装により、Facebook、Twitter、Mail などにさまざまな文字列を提供できる単一のプロバイダーを作成できます。AirDrop 経由で共有する場合、テキストなしで pdf ファイルを共有します。また、AirDrop による共有は を閉じないためUIActivityViewController、他のすべての「アクティビティ」は AirDrop による共有後に適切に機能するはずです。ご協力いただきありがとうございます!

4

0 に答える 0