Главная » iPhone, Objective-C, Программирование для iOS и MacOS » BNRAppDelegate iTahDoodle

0

Создавая ваш проект по шаблону Empty Application, Xcode создает за вас всего один класс: BNRAppDelegate. Класс «делегата приложения» является отправной точкой для создания приложения; такой класс присутствует в каждом приложении для iOS. BNRAppDelegate существует в одном экземпляре, который отвечает за обработку событий и координацию работы других объектов в приложении.

Откройте  файл  BNRAppDelegate.h.  Добавьте  четыре  переменных  и  метод

экземпляра. Первые три переменные экземпляра представляют собой указатели на объекты, которые пользователь видит и с которыми может взаимодействовать, – табличное представление для отображения списка задач, текстовое поле для ввода новой задачи и кнопка для включения введенной задачи в таблицу. Четвертый объект – изменяемый массив. В нем задачи будут храниться в виде строк.

#import <UIKit/UIKit.h>

@interface BNRAppDelegate : UIResponder <UIApplicationDelegate>

{

UITableView *taskTable; UITextField *taskField; UIButton *insertButton; NSMutableArray *tasks;

}

-­‐        (void)addTask:(id)sender;

@property (strong, nonatomic) UIWindow *window;

@end

Обратите внимание: шаблон импортирует файл UIКit.h. Библиотека UIKit содержит большинство классов для iOS, включая UIТаblеViеw, UIТextField и UIButton. Кроме того, BNRAppDelegate поддерживает протокол UIApplicationDelegate.

Заметьте, что мы не импортируем Foundation.h. Как тогда использовать NSМutаblеАггау? В этом шаблоне заголовок библиотеки Foundation входит в предварительно откомпилированный файл заголовка проекта, так что классы Foundation автоматически доступны для использования. (Не верите? Щелкните на файле iTahDoodle-Prеjix.рсh в разделе Supporting Files навигатора проекта и убедитесь сами.)

Добавление вспомогательной функции С

По объявлениям переменных экземпляров можно понять, что приложение iТahDоodle будет содержать минимум четыре дополнительных объекта. На прежде чем браться за эти объекты, мы напишем функцию С. В Objective-C для выполнения основной работы обычно используются методы вместо функций, поэтому функции С в приложениях Objective-C часта называются «вспомогательными» функциями.

Приложение iTahDoodle хранит задачи пользователя в списке свойств – то есть

в файле XML. Это означает, что вам понадобится как-та определить местонахождение файла во время выполнения приложения. Мы напишем функцию С, которая возвращает путь к файлу в формате NSString.

Чтобы добавить вспомогательную функцию в приложение, необходимо сначала объявить ее в файле BNRAppDelegate.h.

#import <UIKit/UIKit.h>

// объявление вспомогательной функции для получения пути

// к каталогу на диске, который будет использоваться

// для сохранения списка задач

NSString *docPath(void);

@interface BNRAppDelegate : UIResponder

<UIApplicationDelegate>

{

UITableView *taskTable; UITextField *taskField; UIButton *insertButton;

NSMutableArray *tasks;

}

-­‐        (void)addTask:(id)sender;

@property (strong, nonatomic) UIWindow *window;

@end

Обратите внимание: объявление docPath() находится да объявления класса. Эта связана с тем, что хотя функция docPath() объявляется в файле BNRAppDelegate.h, она не является его частью. Вообще говоря, для нее можно было бы создать пару отдельных файлов в проекте iTahDoodle. На поскольку iTahDoodle содержит всего одну вспомогательную функцию, мы для простаты размещаем ее в файлах класса делегата приложения.

Теперь откройте BNRAppDelegate.m и реализуйте вспомогательную функцию.

И снова,  так  как docPath() не  является частью  класса,  реализация должна располагаться после #import, но до строки @imрlеmеntаtiоn (в которой начинается реализация класса).

#import "BNRAppDelegate.h"

// Вспомогательная функция для получения пути к списку задач

// хранящемуся на диске NSString *docPath()

{

NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

YES);

return [[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.td"];

}

@implementation

NSUserDomainMask,

Функция docPath() вызывает другую функцию С, NSSearchPathFor DirectoriesInDomains(). Эта функция ищет каталоги, удовлетворяющие заданному критерию, н возвращает их в массиве. Пока не обращайте внимания на аргументы: почти во всех приложениях iOS, которые вы когда-либо напишете, вы будете передавать этой функции эти три аргумента и получать массив с ровно одним элементом . ( Если вас интересует , как работает функция NSSearchPathForDirectoriesInDomains(),  найдите  ее  описание  в  справочнике

«Foundation Functions Reference» в документации разработчика.)

Объекты в приложении iTahDoodle

Вернемся  к  нашим  объектам.  Вам  уже  известны  пять  объектов,  образующих приложение iTahDoodle: прежде всего экземпляр BNRAppDelegate, а в нем хранятся

указатели на четыре других объекта: экземпляры UIТаblеViеw, UIТextField, UIButton и NSМutаblеАrrау.

Но прежде чем мы перейдем к настройке и связыванию этих объектов – немного теории о объектах и отношениях между ними.

Рис.27.4, Диаграмма объектов iTahDoodle

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии