Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在问答中运用MVC模式;申请书?_Ios_Model View Controller - Fatal编程技术网

Ios 如何在问答中运用MVC模式;申请书?

Ios 如何在问答中运用MVC模式;申请书?,ios,model-view-controller,Ios,Model View Controller,我有一个应用程序,可以帮助解决设备故障。要进行此故障排除,我提出建议,然后询问用户输入一个他们必须回答才能继续的问题。根据答案,我将加载一个新视图,其中包含一组新的建议和问题。我不确定我是否理解MVC设置的模型部分。我有一个模型,包含建议、建议图片、问题、答案。。。然后,我还将问题链接到新的模型对象。我只是想知道这是否是最佳实践?还是我误解了MVC设计方案 编辑:以下是我的模型概述: #import <Foundation/Foundation.h> @interface trou

我有一个应用程序,可以帮助解决设备故障。要进行此故障排除,我提出建议,然后询问用户输入一个他们必须回答才能继续的问题。根据答案,我将加载一个新视图,其中包含一组新的建议和问题。我不确定我是否理解MVC设置的模型部分。我有一个模型,包含建议、建议图片、问题、答案。。。然后,我还将问题链接到新的模型对象。我只是想知道这是否是最佳实践?还是我误解了MVC设计方案

编辑:以下是我的模型概述:

#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非常简单:

  • 视图
    反映了
    模型的状态
  • 控制器
    构造并显示
    视图
    和其他
    控制器
  • 控制器
    还跟踪
    模型的状态
    ,并可以修改用户体验和
  • 控制器
    请求
    模型
    修改其状态(“下一个问题”)
在iOS中,
视图
通常是
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;