Ios 如何在问答中运用MVC模式;申请书?
我有一个应用程序,可以帮助解决设备故障。要进行此故障排除,我提出建议,然后询问用户输入一个他们必须回答才能继续的问题。根据答案,我将加载一个新视图,其中包含一组新的建议和问题。我不确定我是否理解MVC设置的模型部分。我有一个模型,包含建议、建议图片、问题、答案。。。然后,我还将问题链接到新的模型对象。我只是想知道这是否是最佳实践?还是我误解了MVC设计方案 编辑:以下是我的模型概述:Ios 如何在问答中运用MVC模式;申请书?,ios,model-view-controller,Ios,Model View Controller,我有一个应用程序,可以帮助解决设备故障。要进行此故障排除,我提出建议,然后询问用户输入一个他们必须回答才能继续的问题。根据答案,我将加载一个新视图,其中包含一组新的建议和问题。我不确定我是否理解MVC设置的模型部分。我有一个模型,包含建议、建议图片、问题、答案。。。然后,我还将问题链接到新的模型对象。我只是想知道这是否是最佳实践?还是我误解了MVC设计方案 编辑:以下是我的模型概述: #import <Foundation/Foundation.h> @interface trou
#import <Foundation/Foundation.h>
@interface troubleshootingInfo : NSObject {
NSString *stepTitle;
NSString *stepCount;
NSString *description;
NSString *imageTitle;
NSString *descriptionImageLink;
NSString *questionTitle;
NSMutableArray *actionsToPerform;
NSMutableArray *actionsStatus;
NSMutableArray *actionsImage;
NSMutableArray *actionImageTitle;
NSMutableArray *logActions;
troubleshootingInfo *nextNoObject;
troubleshootingInfo *nextYesObject;
// This is to be used with selections
NSMutableArray *userInputForAction;
}
//perform function on the set values
- (int) setActionRowHieght:(int)actionID; // get row hieght for table cell
- (int) setDescriptionRowHeight; // get row hieght for table cell
- (int) setQuestionTitleHeight; // get row hieght for table header
- (int) actionCount; // the number of actions in the actionsToPerform array
- (BOOL) isAction; // is action set
- (BOOL) isDescription; // is description set
- (BOOL) isQuestion; // is question set
- (BOOL) isActionPerformed:(int)action; // check if action is performed
- (BOOL) isActionImage:(int)action; // check if action has an image
- (NSString *) updateActionPerformed:(int)action;
好的,很抱歉搞混了。我的问题与分层数据模型和表视图有关。在阅读了Apple文档之后,我觉得我对如何处理复杂的表有了更好的想法。我相信我在这里介绍的类实际上需要是更复杂的数据模型的一部分。我会重新考虑我的设计。谢谢。我要做一些调整: 命名:类名应该大写 属性:大括号之间列出的IVAR可以替换为属性。编译将自动生成getter和setter 设计:提及UI布局属性的方法(如行高)不属于模型。视图控制器通常关注这类事情(例如,作为表视图的数据源)。很可能,这些方法中的代码属于视图控制器。
- 使用大写字母作为类名(
)TroubleshootingInfo
- 不要直接使用IVAR,请使用属性。应该是私有的属性(即不被其他类直接使用)可以放在.m文件的
类别中(()
)@interface TroubleshootingInfo()
- 模型不应该知道任何关于行高度的信息,这是针对视图(偶尔也包括视图控制器)的
- 您的
等。布尔听起来像是isAction
或hasAction
等。他们询问的是对象是否有属性,而不是对象是否是该属性isActionSet
控制器
样式的对象,而不是模型
对象。测验域中的模型
应该与行高之类的事情完全无关。模型
是域:问题和答案。可能是“下一个问题”(这取决于下一个问题的选择是否由上一个答案决定,就像在适应性测试中一样)
经典的MVC triad非常简单:
反映了视图
模型的状态
构造并显示控制器
和其他视图
控制器
还跟踪控制器
,并可以修改用户体验和模型的状态
请求控制器
修改其状态(“下一个问题”)模型
视图
通常是UIView
的子类,通常有其他UIView
元素和小部件作为成员。Controller
将是UIViewController
的某种形式。模型
采用适合于域的形式
既然你说的是行高,我建议你阅读一些关于
UITableViewController
你考虑了什么?你的模型需要保存什么样的信息,你可以如何构造它?@Kevin我已经显示了我想要使用的自定义对象。我不确定这种结构是否是个好主意。H太令人兴奋了,这就像是工作中的同行评议!我注意到课堂上没有任何评论。也许添加一些评论让其他程序员知道它的确切作用可能会有所帮助。我已经尝试缩小到我实际提出的问题。问题是基于表的应用程序的层次结构设计。谢谢你的建议。我忘了大写字母类名。对于行高类型信息:我在tableViewController中使用它。我试图创建一个独立于它所显示的数据的tableViewController,我将把它放回控制器中(我认为这是模型的想法)。这也是跟踪用户响应的一种可接受的方法吗?我明白你所说的表视图控制器保持独立于数据的意思。更好的方法是让模型回答vc可以放入表中的“摘要”之类的内容。vc可以测量高度(或行数等)关于用户响应,您必须参考“userInputForAction”?似乎是合理的,如果该数组最终指向模型中的其他节点,那么作为一个由用户答案连接的问题网络,这是有意义的。但我需要更多地了解该应用程序,以提供有用的建议。我明白你所说的hasAction的意思。这对于可读性来说是一个很好的观点。谢谢我查看了UITableViewController and实际上为他们找到了层次结构设计的苹果文档。
@interface TroubleshootingInfo : NSObject
// values of the class
@property NSString *stepTitle;
@property NSString *stepCount;
@property NSString *description;
@property NSString *imageTitle;
@property NSString *descriptionImageLink;
@property NSString *questionTitle;
@property NSMutableArray *actionsToPerform;
@property NSMutableArray *actionsStatus;
@property NSMutableArray *actionsImage;
@property NSMutableArray *actionImageTitle;
@property NSMutableArray *logActions;
@property TroubleshootingInfo *nextNoObject;
@property TroubleshootingInfo *nextYesObject;
// This is to be used with selections
@property NSMutableArray *userInputForAction;
//perform function on the set values
- (int) actionCount; // the number of actions in the actionsToPerform array
- (BOOL) hasAction; // is action set
- (BOOL) hasDescription; // is description set
- (BOOL) hasQuestion; // is question set
- (BOOL) isActionPerformed:(int)action; // check if action is performed
- (BOOL) ihasActionImage:(int)action; // check if action has an image
- (NSString *) updateActionPerformed:(int)action;