私のアプリでは、作成したコンテンツを Facebook、Twitter、電子メール、SMS で共有できます。これらの各オプションには、対応する UISwitch があります。ユーザーはすべてのスイッチを構成し、[完了] ボタンを押します。各スイッチについて、「ON」に設定されている場合は、適切なメソッド ( shareViaSms
、shareViaEmail
など) を起動します。このメソッドは、ネイティブ iOS ビューコントローラーをインスタンス化して、そのタイプの共有 (TWTweetComposeViewController、MFMailComposeViewController など) を実現します。これらの viewController には、完了を通知するデリゲート コールバックがあり、1 つが完了すると (誰かが電子メール作成シートを送信またはキャンセルすると)、次の使用を開始する必要があります。
これを管理する私の現在のコードは扱いにくいと感じており、より良い解決策を探しています。ユーザーが 4 つのオプションをすべてオンにするとshareViaFacebook.
、デリゲート メソッドを持つ最初の共有メソッドを呼び出します。完了したら、次の共有オプションの UISwitch ステータスを確認し、オンの場合はその共有メソッドを呼び出し、そうでない場合は、その共有メソッドを呼び出します。次のスイッチなどを確認します。各デリゲートの完了メソッドは残りのスイッチをループし、次の共有メソッドの呼び出しを担当します。ご想像のとおり、新しいオプションを追加するには、多くのコードを変更し、多くの if/else 条件を変更する必要があります。
どうすればこれを改善できますか? すべての UISwitches を簡単に確認できるようにしたいと考えています。「ON」に設定されている場合は、対応する共有メソッド ( shareViaSMS
) をキューに追加し、そのキューを実行して、前の共有メソッドが次の共有メソッドを自動的に呼び出すようにしたいと考えています。 1つが完了します。前述のように、完了は非同期であり、デリゲート コールバックを介して通知されるため、苦労しています。