CS193P Назначение 1 Очистить - PullRequest
       65

CS193P Назначение 1 Очистить

0 голосов
/ 22 февраля 2012

Я только начал класс Stanford iOS5 и завершил калькулятор RPN, но хочу, чтобы кнопка «Очистить» работала немного по-другому.Вот как у меня это сейчас, без изменений в "мозг" CalculatorModel:

- (IBAction)clearPressed
{
    self.display.text = @"";                        // Clear the display
    self.historyWindow.text = @"";                  // Clear the history window
    self.model = nil;                               // Reset the stack
    self.userIsInMiddleOfEnteringNumber = NO;       // Reset user typing boolean
}

Я могу ошибаться, но "self.model = nil;"кажется, что он не удаляет объекты из стека, а просто имитирует это.Поэтому я добавил функцию в «мозг» CalculatorModel:

-(void) clearOperandStack
{
    [self.operandStack removeAllObjects];
}

и хочу вызвать ее в моей функции «clearPressed» в CalculatorViewController, но у меня, возможно, возникают проблемы, потому что я еще не полностью понимаю цель c,Это то, что я думал, что должен был сделать, но, похоже, он не хочет работать.

- (IBAction)clearPressed
{
    self.display.text = @"";                        // Clear the display
    self.historyWindow.text = @"";                  // Clear the history window
//    self.model = nil;                               // Reset the stack
    [self.model clearOperandStack];
    self.userIsInMiddleOfEnteringNumber = NO;       // Reset user typing boolean
}

Может кто-нибудь объяснить мне правильный способ вызова этого метода / что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Вот ссылка на другую ветку, которая отвечает на вопрос.

CS193P - Добавление кнопки отмены в калькулятор iOS

Давайте посмотрим, смогу ли я объяснить, почему само.model = nil;

Я собираюсь использовать аналогию с листом бумаги для вашей модели.В этой статье вы можете написать свой стек, а также любые дополнительные сведения, которые может знать ваша модель.

Предполагая, что вы лениво создаете экземпляр своего геттера для модели (как это делал инструктор);Когда вы вызываете self.model, если у вас уже есть лист бумаги с вашей моделью, он сообщит вам, что, если у вас нет листа бумаги для вашей модели, он возьмет чистый лист бумаги и сделает его вашиммодель.

Теперь, когда вы говорите, self.model = nil;Вы говорите, чтобы выбросить лист бумаги ваших моделей.Это означает, что теперь у вас больше есть стек или любая другая вещь, которая есть в вашей модели.

Теперь, когда получатель получает ленивый экземпляр, когда вы в следующий раз запрашиваете свою модель, у него его еще нет., так что он станет для вас совершенно новым.

Так что, возможно, краткое резюме - self.model = nil;не очищает ваш стек, он полностью выбрасывает стек, у вас нет пустого стека, у вас нет стека.

В то время как ваш clearOperandsStack просто очищает стек, так что у вас есть пустой стек.

0 голосов
/ 22 февраля 2012

Мое решение по заданию 1: https://github.com/rl1987/CS193p-Homework-1

...