1

背景

我正在编写没有 UI 的应用程序的一部分。它位于后台,监视您的工作并为您的工作计时。

时间数据不应有重叠,时间数据不应有中断。如果存在上述任何一种情况,则应用程序在某处存在错误,需要通知我。

我想要的是

一个名为 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在 JGReportSender 中有一个 NSNumber 属性。然后当委托方法被调用时,它会被更新。

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

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

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

有什么好主意吗?

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

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

更新

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

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

4

2 回答 2

1

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

我确实希望您将此功能设为可选。如果你不这样做,预计会有很多来自用户的愤怒/好奇的电子邮件(更不用说在网页上公开警告“不要使用这个应用程序,因为它会打电话回家”)。

于 2010-01-04T17:33:31.397 回答
0

只是一个简短的说明,如果有人想要一个很好的教程来实现你自己的代表,就像彼得建议我做的那样,我找到了这个:

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

看看这个。太棒了!

于 2010-01-04T21:47:19.570 回答