Добавление отслеживаемого объекта
В этом приложении существует два пользовательских класса, содержащие прикладную логику. Шаблон Xcode обеспечил AppDelegate класс и создаваемый экземпляр из него в файле пера для Вас. При создании соединений между элементами UI и делегатом приложения Вы добавили пользовательский код к AppDelegate класс. Делегат приложения действует как объект контроллера в шаблоне разработки Контроллера представления Модели путем обновления представлений и управления объектами модели, хранящими данные реального приложения. Теперь необходимо реализовать объект модели, хранящий объем дорожки. Необходимо реализовать a Track класс и создает экземпляр его в делегате приложения. Когда элемент UI изменяет значение, делегат приложения ответственен за обновление объема дорожки и синхронизацию представлений.

Создайте файлы заголовка и реализации для класса дорожки
Первая задача состоит в том, чтобы создать заголовок и файлы реализации для нового Track класс. Это наследуется от NSObject класс, корневой класс в Objective C.
В XCode, в навигаторе проекта выбирают папку группы TrackMix.
Когда Вы добавляете новые файлы на следующих шагах, они добавляются к навигатору проекта при этом выборе.
Создайте класс Objective C следующим образом:
Выберите File> New> File.
В шаблонном диалоговом окне выберите Cocoa в разделе OS X.
Выберите шаблон класса Objective C и нажмите Далее.

На экране, появляющемся, определяет имя класса для Отслеживания (условно, имена классов начинаются с прописной буквы). Оставьте новый класс как подкласс
NSObjectкласс, и нажимает Далее.
В диалоговом окне Сохранения оставьте группу и цели, как они и нажимают Create.
Файлы должны теперь быть расположены в папке группы TrackMix Вашего проекта. При рассмотрении файлов Вы будете видеть, что тупиковый интерфейс класса и объявления реализации предоставлены для Вас. Необходимо добавить атрибут для представления объема.
Реализуйте класс дорожки
Атрибут объема дорожки реализован с помощью Objective C, объявил свойство. Заявленное свойство является удобным способом реализовать переменную экземпляра.
В заголовочном файле Дорожки (
Track.h), добавьте объявление свойства для afloatзначение вызываютvolume.Заголовочный файл должен быть похожим на это:
#import <Foundation/Foundation.h>
@interface Track : NSObject
@property (assign) float volume;
@end
При создании приложения компилятор читает объявление свойства и генерирует частную переменную экземпляра и методы доступа для volume свойство. Значение _volume переменная экземпляра автоматически установлена в 0 когда Track объект создается.
Добавьте свойство дорожки
Поскольку приложение делегирует для использования экземпляра Track— для хранения объема, выведенного на экран многократными элементами UI — Вы добавляете свойство дорожки к AppDelegate класс.
Компилятор генерирует ошибку, тем не менее, если Вы объявите свойство, не говоря его о Track класс. Вы могли импортировать заголовочный файл для Track класс (Track.h), но обычно Вы обеспечиваете использование предописания @class. Предописание является обещанием компилятору это Track будет определен где-то в другом месте и что это не должно напрасно тратить время, проверяя на него теперь. (Выполнение этого также избегает зацикливаний, если бы два класса должны относиться друг к другу и иначе включали бы заголовочные файлы друг друга.) Вы тогда импортируете сам заголовочный файл в файле реализации.
В заголовочном файле делегата приложения (
AppDelegate.h), добавьте предописание дляTrackкласс перед объявлением интерфейса дляAppDelegate.@class Track;
Добавьте объявление для
trackсвойство между последним@propertyобъявление и@endсимвол.@property (strong) Track *track;
Свойство указывает
strongатрибут, а неweakатрибут, указывая, чтоTrackобъект принадлежит делегату приложения. Пока делегат приложения ссылается на него,Trackобъект не уйдет. Объявления свойства выхода Вы создали более раннее использованиеweakприпишите, потому что соответствующие элементы UI содержатся в иерархии представления, принадлежащей окну, не делегату приложения. Окно и его иерархия представления могут уйти независимые от делегата приложения.
Подтвердите что Ваш AppDelegate файл интерфейса класса (AppDelegate.h) похож на это. (Комментарии не показаны, и порядок свойства и объявлений метода не важен.):
#import <Cocoa/Cocoa.h> |
@class Track; |
@interface AppDelegate : NSObject <NSApplicationDelegate> |
@property (assign) IBOutlet NSWindow *window; |
@property (weak) IBOutlet NSTextField *textField; |
@property (weak) IBOutlet NSSlider *slider; |
@property (strong) Track *track; |
- (IBAction)mute:(id)sender; |
- (IBAction)takeFloatValueForVolumeFrom:(id)sender; |
@end |
Создайте экземпляр дорожки
Теперь, когда Вы добавили track свойство к AppDelegate класс, необходимо установить его значение в экземпляр Track.
В файле реализации для делегата приложения (
AppDelegate.m), импортTrack.hпутем добавления этой строки кода перед@implementationоператор:#import "Track.h"
Иначе, когда Вы сошлетесь, Вы будете видеть ошибку компиляции позже
Trackкласс.Создайте экземпляр
Trackпутем добавления следующего кода как первых двух операторов в реализацииapplicationDidFinishLaunching:метод:Track *aTrack = [[Track alloc] init];
[self setTrack:aTrack];
Эти две строки кода делают следующее:
Выделите память для экземпляра
Trackкласс.Инициализируйте экземпляр
Trackкласс для подготовки его к использованию.Установите новую дорожку, чтобы быть
trackсвойство с помощью метода доступа.Вы не должны объявлять или писать код для
setTrack:. Компилятор автоматически создает это средство доступа дляtrackзаявленное свойство, скрывающееся_trackчастная переменная экземпляра.
Objective C также поддерживает запись через точку. Можно заменить [self setTrack:aTrack]; с:
self.track = aTrack; |
Запись через точку вызывает точно тот же метод доступа (setTrack:) как в исходной реализации. Запись через точку обеспечивает компактный синтаксис для вызова методов доступа — особенно при использовании вложенных выражений.
Протестируйте приложение
Можно теперь протестировать приложение.
Скомпилируйте и работайте, проект (выберите Build> Build и Run, или щелкните по Кнопке запуска на панели инструментов XCode).
Ваше приложение должно скомпилировать без ошибок, и необходимо видеть тот же пользовательский интерфейс как прежде. Неутешительно, пользовательский интерфейс должен также вести себя, как он сделал прежде. Несмотря на то, что у Вас теперь есть a Track объект, делегат приложения ничего не делает с ним вне создания его. Существует немного больше работы, чтобы сделать для завершения реализации.
Резюме
Вы реализовали вызванный класс модели Track сохранить a volume атрибут выведен на экран многократными элементами UI. В делегате приложения Вы объявили свойство для a Track возразите и выполняемый несколько других задач по обслуживанию. Методы доступа для свойства автоматически синтезируются.
© 2013 Apple Inc.Все права защищены. (Последнее обновление: 23.04.2013)