私はiPhoneアプリのデザインに取り組んでいます。私は次のようにハイレベルで定義され、キックオフにはかなり強烈なプロセスを持っている:iPhoneで長い、依存する非同期プロセスを設計して開始する最も良い方法は?
- ユーザーはinApp 購入のためのUITableViewから項目を選択します。
- ユーザーがUIで購入を確認します。
- 非同期プロセスは、App Storeにアクセスして、 が以前に購入されたかどうかを確認します。そうでない場合は、 アイテムを購入します。 iPhone アプリに、アイテム の購入が成功した旨が通知されます。 ( 以前に購入した場合、 アプリは気にせずに手順4に進みます)。
- 次に、購入したアイテムのデータをダウンロードするために私のプライベートサーバーに移動します。
- その後、アプリケーションはCoreDataにデータをインポートします。
プロセスの各ステップで、エラーがユーザーに報告され、プロセス全体が停止します。
私はactivityIndicatorControllerというクラスを持っています。このクラスは、何が起こっているのかを示す何らかのテキストとともに、ユーザーにとって素晴らしいUIActivityIndicatorを提示します。プロセスの各ステップで、activityIndicatorのラベルを新しいステータスで更新する必要があります。
質問/懸念:
それは設計とコーディングの観点からだが、一番簡単な方法は、すべてのステップのための一つの大きなNSOperationを使用することです。しかし、私はこれが後で私を苦しめるかもしれないと心配しています。私は間違った道を下って、後にたくさんのコードを裂かなければならない。
私は、3つの別々のNSOperations(OpInAppPurchase、OpDownload、OpImport)を実装する方が良いと言っています。しかし、後続の各操作はそれ以前の操作に依存するだけでなく、1つでも失敗した場合、残りのNSOperationsはまったく呼び出されません。しかし、私はどのようにこれを設計/コードするか分からない。
何か助けていただければ幸いです。
EDIT:これまでのすべての人の助けを
感謝。私が達成しようとしているものについて、私はユーザーが操作をキャンセルすることを望んでいません。しかし、私はアプリケーションが後続の操作をキャンセルできるようにしたい。私が実現に失敗したのは、試行錯誤によって発見されただけのことです(つまり、「奇妙な」瞬間)、別のプロセスで操作が開始されると、開始された子操作も同じ別のプロセスで実行されます。
以下にリンクされているAppleの記事を読んだところ、私のニーズのために、NSInvocationOperationが必要なものを正確に実行し、プロセスごとに別々のNSOperationオブジェクトを作成する必要がなくなりました。次に、NSErrorオブジェクトがメインスレッドに失敗した場合、またはメインスレッドが成功した場合に別のコールバックにコールバックします。
おそらく私は、ユーザーが今後キャンセルできるようにするために、他のプロセスとNSOperationを使用します。
NSOperationQueueには、操作間の依存関係を設定するための、失敗したステップを処理するメカニズムがありません。キュー内の各操作は、それまでの操作の成功または失敗を確認する必要があります。また、外部操作によっては、依存操作の成功時に各操作を順次追加する必要があります。 –
ありがとう、スティーブとアダム。 Adam、1つの大きな操作を行うことでこれを達成する最善の方法は?または、プロセスを続行するかどうかを確認するグローバル変数(BOOL?)を使用することをお勧めしますか?それとも良い方法がありますか? – jschmidt
上記の私のコメントを無視してください。質問の私の編集を参照してください。 – jschmidt