构建我的代码所需的建议

时间:2010-01-04 16:49:36

标签: cocoa delegates notifications nsurlconnection

背景

我正在编写没有用户界面的应用程序的一部分。它坐在后台观看您的工作并为您的工作安排时间。

应该没有重叠时间,时间数据应该没有中断。如果有这些东西,应用程序有一个错误,我需要得到通知。

我想要什么

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

  1. 检查数据存储的重复次数。自上次重复报告日期以来扫描存储在NSUserDefaults中。

  2. 如果找到重复的时间,请构建报告。

  3. 发送报告。

    如果发送不成功,请退出。否则继续。

  4. 删除重复项

  5. 更新NSUserDefaults中的最后一个重复报告日期

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

  7. 我得到了什么

    我已经创建了一个基类,可以完成发送报告的所有艰苦工作。

    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进行通信?

    我的废话想法

    我的想法是在JGReportSender中拥有reportStatus NSNumber属性。然后,当调用委托方法时,会更新它。

    reportStatus = 1表示“报告发送正常”。

    reportStatus = 2表示“发送问题报告”。

    然后我可以为JGDataDuplicateReportSender和JGDataBreakReportSender添加reportStatus的观察者。然后,这将处理报告发送错误或继续。

    有什么好主意吗?

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

    任何想法如何以一种整洁的方式做到这一点?

    更新

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

    我意识到所有的隐私问题 - 这样我可以让软件变得更好,而不是因为我可以窥探人们!

2 个答案:

答案 0 :(得分:1)

为报告发件人提供delegate属性和协议,至少包含两种方法:reportSenderDidSucceed:reportSender:failedWithError:。报告发件人将从其connection:didFailWithError:方法发送后一条消息,并传递它所获得的错误对象。

我希望你能使这个功能成为可选的。期待来自用户的大量愤怒/好奇的电子邮件(更不用说公共警告“不要使用此应用程序,因为它在网页上打电话回家”),如果你不这样做。

答案 1 :(得分:0)

如果有人想要一个关于实施自己的代表的好教程的话,可以快速说一下,正如彼得建议的那样,我找到了这个:

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

检查出来。这太棒了!