代码之家  ›  专栏  ›  技术社区  ›  John Gallagher

构建代码所需的建议

  •  1
  • John Gallagher  · 技术社区  · 15 年前

    背景

    我正在编写一个没有用户界面的应用程序部分。它位于背景中,观察你做什么,并为你的工作安排时间。

    时间不应该重叠,时间数据也不应该有中断。如果有这两种情况,应用程序的某个地方有一个bug,我需要得到通知。

    我想要什么

    一个名为JGDataIntegrityController的类,它执行以下操作:

    1. 检查数据存储是否重复。自上次重复报告日期存储在nsuserdefaults后扫描。

    2. 如果发现重复时间,则生成报告。

    3. 发送报告。

      如果发送失败,则退出。否则继续。

    4. 删除重复项

    5. 更新nsuserdefaults中的上次重复报告日期

    6. 对数据中断重复上述步骤。

    我得到了什么

    我已经做了一个基本类,它完成了发送报告的所有艰苦工作。

    Class Diagram 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表示“报告发送正常”。

    reportstatus=2表示“发送报告时出现问题”。

    然后我可以为jgdataDuplicateReportSsender和jgdataBreakReportSsender添加一个ReportStatus观察器。这将处理报告发送错误或继续。

    有什么好主意吗?

    我觉得这是一种非常混乱的方式。我也觉得我忽略了一些非常明显的事情。

    有什么办法可以用一种整洁的方式来做到这一点吗?

    更新

    我完全忘了提-这将是一个100%的选择加入功能。默认情况下,它将被禁用。它还具有三个隐私级别-从“发生数据中断”到“此应用程序使用此文档路径激活后发生数据中断”。报告也将是匿名的。

    我意识到所有的隐私问题-这是为了让软件更好,而不是为了监视别人!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Peter Hosey    15 年前

    给报告发送者一个 delegate 属性和协议,至少有两种方法: reportSenderDidSucceed: reportSender:failedWithError: . 报告发送方将从其 connection:didFailWithError: 方法,传递它得到的错误对象。

    我希望您可以选择此功能。如果你不使用这个应用程序,你会收到很多来自用户的愤怒/好奇的电子邮件(更不用说公开警告不要使用这个应用程序,因为它会在网页上打电话给家里)。

        2
  •  0
  •   John Gallagher    15 年前

    只是一个简短的说明,如果有人想像彼得建议的那样,对自己的代表进行一个很好的指导,我发现了一个:

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

    过来看。太棒了!