CS193P 作业 3,提示#5 - 型号是啥?

Posted

技术标签:

【中文标题】CS193P 作业 3,提示#5 - 型号是啥?【英文标题】:CS193P Assignment 3, Hint#5 - What is the model?CS193P 作业 3,提示#5 - 型号是什么? 【发布时间】:2012-05-03 07:19:21 【问题描述】:

我正在学习斯坦福 2011 年秋季 ios 课程: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/

我正在执行任务#3: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/assignments/Assignment%203_2.pdf

总而言之,之前的作业要求构建一个常规计算器,现在这个作业要求我们将此计算器推送到导航控制器,并创建从 CalculatorViewController 到 GraphViewController 的 segue,它将绘制存储在“计算器大脑”。这个 CalculatorBrain 是原始 CalculatorViewController 的模型。

提示#5 一直在谈论这样一个事实,即现在 GraphViewController 的模型与 CalculatorViewController 的模型不同,我不明白他的意思。

我能够构建新 MVC 的唯一方法是在 GraphViewController 的 GraphView(视图)中创建一个协议,其中包含一个名为“dataSource”的类型 ID 的对象。然后在 GraphViewController 中:采用该协议,实例化 GraphView 并将其自身设置为数据源:

-(void) setGraphView:(GraphView *)graphView
  
  _graphView=graphView;   
  self.graphView.dataSource=self;
  

然后在原来的CalculatoViewController中,使用prepareForSegue将程序传递给GraphViewController:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

  if([segue.identifier isEqualToString:@"Graph"])
  
    GraphViewController *myGraphViewController = segue.destinationViewController;
    myGraphViewController.myCalculator=self.myCalcBrain;
  

所以这似乎工作正常。所以如果这样的话,那就意味着 GraphViewController 的模型真的是他明确说不是的原始计算器大脑!

我的意思是,在 segue 期间,我将来自原始 CalculatorViewController 的计算器模型实例分配给 Graphviewcontroller 计算器属性,然后使用协议将 Y 值从 GraphViewController 返回到 GraphView,这并不是事实意味着GraphViewController 的模型实际上只是原始的 CalculatorBrain 模型。

【问题讨论】:

不是“这个新视图控制器的模型是什么?”究竟是什么要求你弄清楚? 认为应该是什么?图形视图控制器对哪些数据进行操作? @Caleb 谢谢。真正令人困惑的是,我在 GraphView 类中定义了一个协议(带有一个方法和一个属性),然后让 GraphViewController 实现该协议(和该方法),以使该方法响应所传递的 x 的 Y 值。这让我很困扰,因为在我看来,这告诉我 GraphVC 的模型值(Y)仍然来自主“CalculatorBrain”类,他说它不是。也许这只是语义......我是不是想多了? 【参考方案1】:

我确实相信模型是“程序”,一个 NSArray 对象。它不能是程序的描述,因为没有简单的方法来计算给定 NSString 的“y”值。您必须将 NSString 重新解析为堆栈(NSArray)。这样一来,将模型作为 NSArray/program 不是更直接吗?

【讨论】:

【参考方案2】:

我不想为你回答这个问题,因为这是你应该做的,但我相信你想多了,所以这就是他想让你意识到/做的事情:

您的模型将是一个继承自原始计算器模型的新类。这就是为什么他说你只需要从头开始创建视图和控制器。您还必须创建一个模型类,但许多必要的代码已经存在于旧的 calc 模型中,因此您只需继承它并添加必要的附加功能。

希望对您有所帮助,并且很高兴看到您正在使用这些课程。它们是一个很棒的免费工具!

【讨论】:

您将向继承模型添加什么样的附加功能。真的没有什么可补充的。 GraphView 正在遍历 x 并从 ... 询问并取回 Y 值。由于视图和模型无法相互通信,这告诉我您建议设置 GraphVC 以实例化 Calc Brain(从继承的模型),但仍然通过顶层 MVC 传递原始 Calc 对象。与模型只是@Matt 一样的公式相比,它似乎过于复杂。我希望我们能在这里得到更多的反馈。谢谢【参考方案3】:

当我做那个任务时,我也为这个问题有点挣扎。我得出的结论(无论对错)模型只是一个公式——这看起来就像你得出的结论,虽然不是计算器大脑类,但与它密切相关!

编辑:

我刚刚回去查看了我的计算器程序(我目前正在做 flickr 作业,所以有一段时间没看)

看看基本的计算器,模型是一个“calculatorbrain”对象

在作业的提示中它说

不要将此 Controller 的 Model 与 CalculatorViewController 的 Model 混淆。它们不一样。不要过度思考这一点。您的新控制器模型就在眼前!

我拥有的graphview 控制器模型是一个程序。正如在calculatorbrain 中定义的程序一样——只是一个操作堆栈(NSArray)而不是calculatorbrain。我只是通过 segue 将当前程序传递到 graphview 控制器。

对我来说,它似乎符合提示的细节 - 当您继续查看图表时,程序就在手边,但它与计算器的模型不同相同

提示并没有说它与模型无关。

但我也有点 iOS n00b,所以这只是我的看法!

【讨论】:

【参考方案4】:

模型应该只是一个描述您要绘制的“程序”的 NSString。就像在计算器大脑返回给您的程序中一样!

id program = [self.dataSource.brain program];

【讨论】:

这可能过于复杂了。然后,您必须将 NSString 更改回一个数组才能绘制它...【参考方案5】:

我的模型也是“程序”!

【讨论】:

【参考方案6】:

@Lee Cjin Pheow,你是对的。随着我在这门课程中的进步,这一点变得更加明显。所以模型只是一个保存程序的 NSArray。我认为我的困惑是因为我做了一个 n00b 假设,即 MVC 中的模型必须是它自己的类/文件,因此我搜索了一个模型类/文件。随着我的进步,我看到教授有一个 MVC,其中模型实际上只是一个属性,例如,它位于控制器中。我只需要在我简单的头脑中保持黄色不越线。

【讨论】:

以上是关于CS193P 作业 3,提示#5 - 型号是啥?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI CS193P - 不能在属性初始化程序中使用实例成员“卡片”;属性初始化程序在“自我”可用之前运行

未调用 mkmapview 委托方法 -calloutaccessorycontroltapped

华为cun-al00是啥型 号

cun-al00是啥型号

第八次团队作业:Beta冲刺(3/5)

博客作业4