Фон
Я пишу часть моего приложения, в которой нет пользовательского интерфейса. Он сидит на заднем плане, наблюдая за тем, что вы делаете, и рассчитывает время вашей работы.
Не должно быть перекрывающихся времен и не должно быть перерывов во временных данных. Если есть какая-либо из этих вещей, приложение где-то имеет ошибку, и я должен быть уведомлен.
Что я хочу
Класс с именем 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
NSNumber в JGReportSender. Затем, когда вызываются методы делегата, это обновляется.
reportStatus = 1 означает «отчет отправлен ОК».
reportStatus = 2 означает «проблема отправки отчета».
Тогда я мог бы добавить наблюдателя для reportStatus для JGDataDuplicateReportSender и JGDataBreakReportSender. Затем он обработает ошибку отправки отчета или продолжит работу.
Есть ли хорошие идеи?
У меня такое ощущение, что это действительно грязный способ сделать это. Я также чувствую, что пропускаю что-то действительно очевидное.
Есть идеи, как это сделать аккуратно?
Update
Я совершенно забыл упомянуть - это будет 100% функция. Это будет отключено по умолчанию. Он также будет иметь 3 уровня конфиденциальности - от «произошел разрыв данных» до «произошел разрыв данных после того, как это приложение было активно с этим путем к документу». И отчеты также будут анонимными.
Я осознаю все проблемы конфиденциальности - так я могу улучшить программное обеспечение, а не шпионить за людьми!