关于这里的负面评论,我只是小步骤地简化了我的问题;
我有一个基于视图的应用程序,它与Web服务进行通信并重新获取xml,解析xml并将其竞争映射到适当的视图组件(例如,如果日期显示带有datepicker的问题,如果问题有2个值显示为分段控制,如果有更多的pickerview..etc)所以它是一个有很多页面的动态问题。
1-App Receive XML
2-Parse XML并获取最新未解答的问题(每页可以有无限数量的问题),根据问题类型,需要使用文本框或选择器视图或分段控件来询问每个问题,它也可能需要一些标签来解释,验证警报和问题标签。每个问题和标签都应该有不同的字体和颜色,在xml中定义。
3-用户回答页面中的所有问题,然后按发送按钮。
4-Web服务接收,检查答案并根据给出的答案发回新问题。
5-APP接收新的XML(每个XML包括整个状态,即之前回答的所有问题)并解析以找出最新的未答复的问题。
6-用户再次回答并发送问题并等待下一组问题,直到没有问题为止
7-OR用户可能想要返回并编辑之前页面中的一些问题。但如果他编辑了之前页面中的任何问题,那么在该页面之后回答的页面将不再有效,因为每组问题服务器发送取决于先前回答的问题,因此它需要从XML中删除所有后续问题并发送回请求好像是等待回复的最新页面。
问题;
我想创建一个完全可以定制的问题对象,并包含可能的必要UI组件(文本框或日期选择器或选择器以及一些标签及其可见选项和颜色),并根据问题类型创建该对象,然后插入对象到UIscrollview或表视图。那么如何定义这个对象的类呢?它应该是UIview类的子类吗?我应该把它的delegete方法放在哪里?
谢谢!
答案 0 :(得分:1)
这可能是UITableViewCell的子类。您可能希望为自己的问题创建一个NSObject子类,并将其加载到自定义单元格中。
答案 1 :(得分:1)
如果您认为可以提前设计每种类型的问题,请为每个问题做一个xib。如果它们彼此太不相同,请创建一个动态组合视图的构建器类。请注意,在任何情况下,您都必须使用代码将视图上的控件链接到视图控制器。
如果您正在使用表格,则返回的视图将作为表格单元格使用,但我认为您不应将日期选择器放在表格中。表基本上是一个列表,而不是一个屏幕容器。导航控制器听起来更好。您应该检查类似的应用程序以获得灵感。
关于单元测试的一些非正式的话......(如果你已经知道单元测试,你可以跳过其余的帖子)......
即使您正在构建整个应用程序,如果您单独处理每个独立任务,OO设计也会发挥最佳效果,因为它会强制执行解耦,这是复杂应用程序的重要目标。
大多数程序员使用单元测试来驱动小的非UI相关代码。单元测试是一小段代码,用于执行和测试另一段代码的结果。它通常在框架的帮助下执行,如GHUnit,在项目内的单独目标上执行。
例如:这是GHUnit中的一个虚构的测试方法,用于测试您的问题解析器是否正常工作。
// is my parser working correctly?
- (void) testDocument {
File *xmlFile = [File alloc] initWithFilename:@"sampleQuestion.xml"];
Question *question = [QuestionParser parse:xmlFile];
GHAssertTrue(question!=nil);
}
如果您的代码通过了测试,那么这是朝着正确方向迈出的坚实一步。而且您不必担心让整个应用程序正在解决此特定任务。
如果你现在没有看到单元测试的重点,那就忘了它,当你准备就绪时它会有意义。