CS193P Задание 3, Совет № 5 - Какая модель?

Я прохожу курс Stanford Fall 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, который будет строить график функции, хранящейся в «CalculatorBrain». Этот CalculatorBrain был моделью для исходного CalculatorViewController.

Подсказка №5 продолжает говорить о том, что теперь модель для GraphViewController отличается от модели CalculatorViewController, и я не могу понять, что он имел в виду под этим.

Единственный способ, которым я смог построить новый MVC, - это создать протокол в GraphView (представлении) GraphViewController с объектом с именем «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 на самом деле является исходным мозгом калькулятора, о котором он специально сказал, что это не так!

Я имею в виду не тот факт, что во время перехода я назначаю свойству калькулятора Graphviewcontroller экземпляр модели калькулятора из исходного CalculatorViewController, а затем использую протокол для возврата значения Y из GraphViewController в GraphView означает, что модель для GraphViewController на самом деле всего лишь оригинальная модель CalculatorBrain.


person Khaled Barazi    schedule 22.04.2012    source источник
comment
Разве это не модель этого нового контроллера представления? что именно вас просят выяснить? Как вы думаете, что это должно быть? С какими данными работает контроллер графического представления?   -  person Caleb    schedule 25.04.2012
comment
@Caleb Спасибо. Что действительно сбивало с толку, так это то, что я определил протокол (с методом и свойством) в классе GraphView, а затем попросил GraphViewController реализовать протокол (и метод), чтобы этот метод ответил значением Y переданного x. Это меня беспокоит, потому что, на мой взгляд, это говорит мне, что значения модели (Y) для GraphVC по-прежнему являются производными от основного класса CalculatorBrain, который, по его словам, не является. Может, это всего лишь семантика .... Неужели я над этим не задумываюсь?   -  person Khaled Barazi    schedule 25.04.2012


Ответы (6)


Я верю, что модель - это «программа», объект NSArray. Это не может быть описанием программы, потому что нет простого способа вычислить значение "y" с учетом NSString. Вам придется повторно проанализировать NSString в стек (NSArray). Таким образом, не проще ли иметь модель как NSArray / программу?

person Lee Cjin Pheow    schedule 24.05.2012

Мне неприятно отвечать на этот вопрос, потому что это то, что вы должны делать, но я верю, что вы слишком обдумываете это, поэтому вот что он хочет, чтобы вы осознали / сделали:

Ваша модель будет новым классом, унаследованным от модели исходного калькулятора. Вот почему он говорит, что вам нужно будет только создать представление и контроллер с нуля. Вам также придется создать класс модели, но большая часть необходимого кода уже существует в старой модели calc, поэтому вы просто наследуете его и добавляете необходимые дополнительные функции.

Надеюсь, что это поможет, и рад видеть, что вы используете эти курсы. Это отличный бесплатный инструмент!

person HackyStack    schedule 27.04.2012
comment
Какие дополнительные функции вы бы добавили к унаследованной модели. Добавить особо нечего. GraphView выполняет итерацию по x, запрашивает у ... и возвращает значение Y. И поскольку представление и модель не могут взаимодействовать друг с другом, это говорит мне о том, что вы предлагаете настроить GraphVC для создания экземпляра Calc Brain (из унаследованной модели), но затем все же получить исходный объект Calc, переданный через MVC верхнего уровня. Это кажется слишком сложным по сравнению с тем, что модель представляет собой формулу @Matt. Я надеюсь, что здесь мы сможем получить больше отзывов. Спасибо - person Khaled Barazi; 30.04.2012

Я тоже немного боролся с этим вопросом, когда выполнял это задание. Я пришел к выводу (правильно или ошибочно), что модель - это просто формула - похоже, что вы пришли к выводу, который, хотя и не является классом мозга калькулятора, очень тесно с ним связан!

изменить:

Я только что вернулся и посмотрел свою программу-калькулятор (в настоящее время я выполняю задание flickr, поэтому давно не смотрел на нее)

Глядя на базовый калькулятор, модель представляла собой объект "мозг калькулятора".

в намеках на задание сказано

Не путайте эту модель контроллера с моделью вашего CalculatorViewController. ОНИ РАЗНЫЕ. И не переусердствуйте. Модель вашего нового контроллера уже под рукой!

модель контроллера графического представления, которая у меня есть, - это программа. Как в программе, как определено в мозге калькулятора - просто стек операций (NSArray), а не мозг вычислителя. Я просто передал текущую программу через переход в контроллер графического представления.

Мне кажется, это соответствует деталям подсказки - программа всегда под рукой, когда вы переходите к графику, но она не такая же, как модель калькулятора.

Однако в подсказке не сказано, что это не связано с моделью.

Но я тоже немного похож на iOS n00b, так что это только мое мнение!

person Matt    schedule 28.04.2012

Модель должна быть просто строкой NSString, описывающей «программу», которую вы собираетесь изобразить. Как в программе, которую вам возвращает Calculator Brain!

id program = [self.dataSource.brain program];
person kumikoda    schedule 29.04.2012
comment
это может быть слишком сложным. Затем вам нужно будет изменить NSString обратно на массив, чтобы иметь возможность построить график ... - person Khaled Barazi; 31.05.2012

Моя Модель тоже была "программой"!

person Michele    schedule 17.05.2012

@Lee Cjin Pheow, вы правы. По мере того, как я продвигался по этому курсу, это становилось все более очевидным. Таким образом, модель - это просто массив NSArray, содержащий программу. Я думаю, что мое замешательство было из-за предположения n00b, которое я сделал, что Модель в MVC должна быть ее собственным классом / файлом и, следовательно, моим поиском класса / файла модели. По мере продвижения я вижу, что у профессора есть MVC, где модель на самом деле является просто свойством, например, которое находится в контроллере. Я просто должен поддерживать желтый цвет, не пересекающий линии в моем простом уме.

person Khaled Barazi    schedule 03.06.2012