如何在Q& A应用程序中使用MVC模型?

时间:2013-12-16 02:02:55

标签: ios model-view-controller

我有一个帮助对设备进行故障排除的应用程序。为了进行此故障排除,我提出建议,然后询问用户输入,并提出必须回答的问题才能继续。根据答案,我使用一组新建议和问题加载新视图。我不确定我是否理解MVC设置的Model部分。我有一个模型,包含建议,suggestion_images,问题,答案,......然后我也将问题链接到新的模型对象。我想知道这是否被认为是最佳做法?或者我误解了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;

任何帮助都会很棒。 感谢

编辑:根据建议修改代码(我认为)。

我的头文件。

@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;

很抱歉这个混乱。我的问题与分层数据模型和表视图有关。阅读Apples文档后,我觉得我对如何处理复杂表格有了更好的了解。我相信我在这里展示的课程实际上需要分开一个更复杂的数据模型。我会重新考虑我的设计。谢谢。

3 个答案:

答案 0 :(得分:1)

看起来很多更像是Controller风格的对象,而不是Model对象。测验域中的Model应该与行高绝对无关! Model:问题和答案。 也许“下一个问题”(这取决于下一个问题的选择是否由之前的答案决定,如在自适应测试中)。

经典的MVC三元组非常简单:

  • View反映了Model
  • 的状态
  • Controller结构并显示View和其他Controllers
  • Controller还会跟踪Model的状态,并可以修改用户体验和...
  • Controller要求Model修改其状态(“下一个问题”)

在iOS中,View通常是UIView的子类,通常有其他UIView个元素和小部件作为成员。 Controller将是UIViewController的某种形式。 Model采用适合该域的形式。

由于您正在讨论行高,我建议您阅读一些有关UITableViewController的教程。

答案 1 :(得分:0)

我会做一些调整:

命名:类名应该大写。

属性:大括号之间列出的ivars可以替换为属性。编译将自动生成getter和setter。

设计:提及UI布局属性的方法(如rowHeight)不属于模型。视图控制器通常关注此类事物(例如,作为表视图的数据源)。最有可能的是,这些方法中的代码属于视图控制器。

答案 2 :(得分:0)

一些观察

  • 使用大写字母表示姓名(TroubleshootingInfo)。
  • 请勿直接使用ivars,请使用属性。应该是私有的属性(即不直接由其他类使用)可以放在()类别(.m文件中为@interface TroubleshootingInfo ()
  • 模型不应该知道关于行高的任何信息。这是为了视图(偶尔查看控制器)。
  • 您的isAction等声音听起来最好是hasActionisActionSet等。他们会询问对象是否属性,如果对象那个属性,那就不行了。