2011-07-29 8 views
8

ディスパッチキューを使用して、一連のバックグラウンドタスクを管理しています(ユーザーの要求に応じて複数のファイルをダウンロードし、UIで待機することはありません)。また、未完了のタスクを永続化する必要があります。たとえば、ネットワークの到達可能性がなくなった場合や、アプリケーションがクラッシュしたり、バッテリが消耗した場合は、次にアプリケーションを実行したときにすべてのタスクが自動的に再開します。iOSアプリケーションで永続タスクキューを作成するベストプラクティスは何ですか?

私は、各タスクブロックがコアデータコンテキストにタスクを保存し、タスクが終了したらそれを削除することを計画しています。また、タスクがあるかどうかをアプリ起動時に確認する必要があります行う。

この種のアプリケーションを作成するベストプラクティスは何ですか?再利用できるサンプル、チュートリアル、ライブラリはありますか?

答えて

4

あなたのテクニックはかなりうまくいくはずです。 あなたのバックグラウンドタスクを管理するクラスを設計し、与えられたタスクを「盲目的に」実行します。

さまざまなビューコントローラからこのクラスにタスクを送信します。提出方法は

-(void) submitTask:(MyTask*) task { 

    task.completionHandler = ^{ [self.runningTasks removeObject:task];} 
    [self.taskQueue addOperation: task];  
} 

のようになります。私はMyTaskには、NSOperationのサブクラスであり、タスクキューがNSOperationQueueであると仮定しています。 runningTasksは、単にUIApplicationDidEnterBackgroundNotificationを受け取ったときに、ディスクにシリアル化されたNSMutableArrayです(CoreDataまたは好きな書式のいずれか)。

GCDでも同様のデザインを実装できます。

関連する問題