Пиша първото си приложение за какао. Това е просто помощно приложение - калкулатор. Всичко ми работи, последното нещо, което искам да добавя е, че искам приложението да реагира на ключови събития при натискане. Така че можете да щракнете върху бутона "4" с мишката или можете просто да натиснете клавиша "4" на клавиатурата. Чета цялата документация за обработка на събития, но не приемам препоръчания подход за получаване на NSResponder (или NSView), който обработва събитието.
Мога да направя подклас на NSWindow и да кажа на създателя на интерфейса да направи главния прозорец от този тип. След това, когато заместя съобщението keyDown в моя нов подклас NSWindow, той получава събитията, но не съм сигурен как да го свържа с класа делегат на моето приложение (тъй като по същество просто искам да включа натиснатия клавиш и да извикам съответното съобщение в делегата, към който е насочено действието на бутона "избор".
Или мисля, че чух нещо за правене на това чрез промяна на супер класа на класа делегат на приложението от NSObject на NSView, или NSResponder или нещо подобно. Не съм се занимавал много с тази идея, но не съм сигурен как всъщност да получа делегирания обект на приложението, след което всъщност да го настроя като първи отговор (мисля, че това е, което бих искал да направя).
Така че се надявам, че някой може да ми даде конкретни указания как/къде трябва да внедря моя метод keyDown, но също така бих искал да разбера каква е препоръчителната „най-добра практика“ за това. Какво според Apple е правилната архитектура за това? Интересувам се да науча как да направя това да работи толкова много, колкото и да науча модела на дизайн на Apple зад него.
Структурата на моята програма е следната: имам един nib файл (всъщност .xib), където съм проектирал моя прозорец с текстово поле за показване и шепа бутони. Регистрирах търговски обекти и действия от там към класа AppDelegate (този, който стандартният шаблон на проект настройва за вас). Следвайки MVC модела, след това имам клас Calculator, който AppDelegate инициализира и цялата действителна логика на калкулатора е в този клас. AppDelegate всъщност просто отговаря на съобщения от бутоните, предава ги на методите в класа Calculator и след това пита калкулатора за текущата стойност на дисплея и я актуализира обратно в текстовото поле. И така, графичните елементи в моя nib файл са "изглед", AppDelegate е "контролер", а класът Calculator е "модел". нали
И така, кой трябва да управлява събитията keyDown? Изглежда, че изгледът трябва да ги улови и да ги изпрати на контролера, но как да настроя това?
Предполагам, че потенциално свързан въпрос е, че съм виждал споменавания на класове "window controller" и "view controller". Не съм сигурен, че разбирам какъв е смисълът от тези класове. Моето просто приложение има ли ги? Трябва ли?