私はiPhoneアプリのデザインに取り組んでいます。私には、次のように高レベルで定義された、開始するためのかなり激しいプロセスがあります。
- ユーザーは、アプリ内購入のためにUITableViewからアイテムを選択します。
- ユーザーがUIで購入を確認します。
- 非同期プロセスはAppStoreに移動し、アイテムが以前に購入されたかどうかを確認します。そうでない場合、アイテムは購入されます。その後、iPhoneアプリにアイテムの購入が成功したことが通知されます。(以前に購入した場合、アプリは気にせず、手順4に進みます。)
- 次に、アプリはプライベートサーバーに移動して、購入したアイテムのデータをダウンロードします。
- 次に、アプリはデータをCoreDataにインポートします。
もちろん、プロセスの各ステップでエラーがユーザーに報告され、プロセス全体が停止します。
何が起こっているかを示すテキストとともに、ユーザーに優れたUIActivityIndicatorを提示するactivityIndicatorControllerというクラスがあります。プロセスの各ステップで、activityIndicatorのラベルを新しいステータスで更新する必要があります。
質問/懸念:
設計とコーディングの観点からすると、最も簡単なことは、すべてのステップで1つの大きなNSOperationを使用することです。しかし、これが後で私を悩ますかもしれないのではないかと心配しています。私は間違った道をたどり、後でたくさんのコードを切り離さなければならないことを望んでいません。
私の内臓は、3つの別々のNSOperations(OpInAppPurchase、OpDownload、OpImport)を実装する方が良いと言っています。ただし、後続の各操作は、前の操作に依存しているだけでなく、1つが失敗した場合は、残りのNSOperationsをまったく呼び出さないでください。しかし、これをどのように設計/コーディングするかはわかりません。
どんな助けでも大歓迎です。
編集:
これまでの皆さんの助けに感謝します。私が達成しようとしていることについては、ユーザーに操作をキャンセルしてほしくない。ただし、アプリで後続の操作をキャンセルできるようにしたいと思います。私が気づかず、試行錯誤(つまり「当たり前」の瞬間)によってのみ発見されたのは、操作が別のプロセスで開始されると、開始される子操作も同じ別のプロセスで実行されるということです。 。
以下にリンクされているAppleの記事を読んだ後、私は今の自分のニーズに合わせて、NSInvocationOperationが必要なことを正確に実行し、プロセスごとに個別のNSOperationオブジェクトを作成する必要がないことを発見しました。次に、失敗した場合はメインスレッドへのNSErrorオブジェクトを使用してコールバックを実行し、成功した場合はメインスレッドへの別のコールバックを実行します。
おそらく、ユーザーが将来キャンセルできるようにしたい他のプロセスがいくつかあり、他のイベントでNSOperationを使用します。