コードの設計に必要な提案
-
18-09-2019 - |
質問
背景
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 レベルのプライバシーも備えています。そして報告も匿名となります。
私はプライバシーに関するあらゆる懸念を認識しています。これはソフトウェアを改良するためであり、人々をスパイするためではありません。
解決
delegate
とreportSenderDidSucceed:
:、少なくとも二つの方法で、レポートの送信者にreportSender:failedWithError:
プロパティおよびプロトコルを与えます。レポートの送信者は、それが得たエラーオブジェクトを渡して、そのconnection:didFailWithError:
メソッドから後者のメッセージを送信します。
私はあなたがこの機能をオプションにいただければ幸いです。あなたがいない場合(Webページ上で、「それの携帯電話のホームので、このアプリを使用していない」の公開警告を言及していない)ユーザーからの怒り/好奇心電子メールの多くを期待しています。
他のヒント
誰でもピーターは、私が示唆されたとして、独自のデリゲートを実装するには良いチュートリアルを望んでいるならば言うことだけで簡単なメモを、私はこの1つを見つけます:
http://cocoadevcentral.com/articles/000075.phpする
それをチェックアウト。それは素晴らしいです!