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 - 不能在属性初始化程序中使用实例成员“卡片”;属性初始化程序在“自我”可用之前运行