Предложения, необходимые для создания архитектуры моего кода

StackOverflow https://stackoverflow.com/questions/2000694

Вопрос

Предыстория

Я пишу часть своего приложения, у которой нет пользовательского интерфейса.Он находится в фоновом режиме, наблюдая за тем, что вы делаете, и рассчитывая время вашей работы.

Не должно быть перекрывающихся времен, и в данных о времени не должно быть разрывов.Если есть что-то из вышеперечисленного, значит, в приложении где-то есть ошибка, и мне нужно получить уведомление.

Чего я хочу

Класс с именем JGDataIntegrityController , который выполняет следующее:

  1. Проверьте хранилище данных на наличие дубликатов.Сканируйте с даты последнего дубликата отчета, сохраненного в NSUserDefaults.

  2. Если будут обнаружены повторяющиеся периоды времени, создайте отчет.

  3. Отправьте отчет.

    Если отправка не прошла успешно, выйдите.В противном случае продолжайте.

  4. Удалите дубликаты

  5. Обновите дату последнего повторяющегося отчета в NSUserDefaults

  6. Повторите описанное выше для разрывов данных.

Что у меня есть

Я создал базовый класс, который выполняет всю тяжелую работу по отправке отчета.

Диаграмма классов 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.Затем это обработало бы ошибку отправки отчета или продолжилось бы дальше.

Есть какие-нибудь хорошие идеи?

У меня такое чувство, что это действительно грязный способ сделать это.Я также чувствую, что упускаю из виду что-то действительно очевидное.

Есть идеи, как сделать это аккуратно?

Обновить

Я совсем забыл упомянуть - это будет функция 100% подписки.По умолчанию он будет отключен.Он также будет иметь 3 уровня конфиденциальности - от "произошел сбой данных" до "сбой данных произошел после того, как это приложение было активным с этим путем к документу".И отчеты тоже будут анонимными.

Я осознаю все проблемы конфиденциальности - это делается для того, чтобы я мог улучшить программное обеспечение, а не для того, чтобы я мог шпионить за людьми!

Это было полезно?

Решение

Дайте отправителю отчета delegate свойство и протокол, по крайней мере, с двумя методами: reportSenderDidSucceed: и reportSender:failedWithError:.Отправитель отчета отправит последнее сообщение со своего connection:didFailWithError: метод, передающий полученный им объект ошибки.

Я очень надеюсь, что вы сделаете эту функцию необязательной.Ожидайте много сердитых / любопытных писем от пользователей (не говоря уже о публичных предупреждениях “не используйте это приложение, потому что оно звонит домой” на веб-страницах), если вы этого не сделаете.

Другие советы

Просто небольшое замечание, чтобы сказать, что если кому-то нужен хороший учебник по внедрению ваших собственных делегатов, как предлагает Питер, я нашел это:

http://cocoadevcentral.com/articles/000075.php

Зацени это.Это превосходно!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top