我有一个帮助对设备进行故障排除的应用程序。为了进行此故障排除,我提出建议,然后询问用户输入,并提出必须回答的问题才能继续。根据答案,我使用一组新建议和问题加载新视图。我不确定我是否理解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文档后,我觉得我对如何处理复杂表格有了更好的了解。我相信我在这里展示的课程实际上需要分开一个更复杂的数据模型。我会重新考虑我的设计。谢谢。
答案 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
)。()
类别(.m文件中为@interface TroubleshootingInfo ()
。isAction
等声音听起来最好是hasAction
或isActionSet
等。他们会询问对象是否属性,如果对象是那个属性,那就不行了。