バックグラウンド
UI のないアプリの一部を作成しています。バックグラウンドであなたの作業を監視し、作業のタイミングを調整します。
時間の重複や、時間データの中断があってはなりません。これらのいずれかがある場合、アプリのどこかにバグがあり、通知する必要があります。
私が欲しいもの
以下を実行する JGDataIntegrityController というクラス:
データ ストアで重複した時間を確認してください。NSUserDefaults に保存されている最後の重複レポート日付以降にスキャンします。
重複する時間が見つかった場合は、レポートを作成します。
レポートを送信します。
送信に失敗した場合は、終了します。それ以外の場合は続行します。
重複を削除する
NSUserDefaults の最後の重複報告日を更新する
データブレークについて上記を繰り返します。
私が持っているもの
レポートを送信するためのすべてのハードワークを行う基本クラスを作成しました。
クラス図 http://synapticmishap.co.uk/ReportClasses.jpg
JGReportSender には次のコードがあります。
-(void)postReport:(NSString *)report {
NSMutableDictionary *form = // Dictionary Holding Report;
NSURLRequest *request = [NSURLRequest requestWithURL:@"http://postURL" postForm:form];
[NSURLConnection connectionWithRequest:request delegate:self];
}
立ち往生している場所
レポートが送信された場合、どうすればよいですか?
デリゲート メソッド:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
レポートが送信されたときに呼び出されます。しかし、JGDataIntegrityController とどのように通信すればよいでしょうか?
私のがらくたのアイデア
私の考えはreportStatus
、JGReportSender に NSNumber プロパティを持つことです。その後、デリゲート メソッドが呼び出されると、これが更新されます。
reportStatus = 1 は、「レポート送信 OK」を意味します。
reportStatus = 2 は、「レポートの送信に問題がある」ことを意味します。
次に、JGDataDuplicateReportSender と JGDataBreakReportSender の reportStatus のオブザーバーを追加できます。これにより、レポート送信エラーが処理されるか、続行されます。
良いアイデアはありますか?
これは本当に厄介な方法だと感じています。また、本当に明白なことを見落としているような気がします。
これをきちんとした方法で行う方法はありますか?
アップデート
言い忘れていましたが、これは 100% オプトイン機能です。デフォルトでは無効になっています。また、「データの破損が発生しました」から「このアプリケーションがこのドキュメント パスでアクティブになった後にデータの破損が発生しました」まで、3 つのレベルのプライバシーがあります。また、レポートも匿名になります。
私はすべてのプライバシーに関する懸念を認識しています - これはソフトウェアをより良くするためであり、人々をスパイするためではありません!