背景
我正在编写没有用户界面的应用程序的一部分。它坐在后台观看您的工作并为您的工作安排时间。
应该没有重叠时间,时间数据应该没有中断。如果有这些东西,应用程序有一个错误,我需要得到通知。
我想要什么
一个名为JGDataIntegrityController的类,它执行以下操作:
检查数据存储的重复次数。自上次重复报告日期以来扫描存储在NSUserDefaults中。
如果找到重复的时间,请构建报告。
发送报告。
如果发送不成功,请退出。否则继续。
删除重复项
更新NSUserDefaults中的最后一个重复报告日期
对数据中断重复上述步骤。
我得到了什么
我已经创建了一个基类,可以完成发送报告的所有艰苦工作。
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个级别的隐私 - 从“发生数据中断”到“此应用程序在此文档路径中处于活动状态后发生数据中断”。报告也将是匿名的。
我意识到所有的隐私问题 - 这样我可以让软件变得更好,而不是因为我可以窥探人们!
答案 0 :(得分:1)
为报告发件人提供delegate
属性和协议,至少包含两种方法:reportSenderDidSucceed:
和reportSender:failedWithError:
。报告发件人将从其connection:didFailWithError:
方法发送后一条消息,并传递它所获得的错误对象。
我希望你能使这个功能成为可选的。期待来自用户的大量愤怒/好奇的电子邮件(更不用说公共警告“不要使用此应用程序,因为它在网页上打电话回家”),如果你不这样做。
答案 1 :(得分:0)
如果有人想要一个关于实施自己的代表的好教程的话,可以快速说一下,正如彼得建议的那样,我找到了这个:
http://cocoadevcentral.com/articles/000075.php
检查出来。这太棒了!