Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Редактирование файла BNRDocument.m- настольное приложение Сосоа

0

Теперь, когда пользовательский интерфейс приложения создан и настроен и в нем созданы все связи, пришло время вернуться к написанию кода. Щелкните на файле BNRDocument.m в навигаторе проекта, чтобы снова открыть его в редакторе, и реализуйте createNewItem:.

#import "BNRDocument.h" @implementation BNRDocument #pragma mark -­‐  NSDocument Overrides

-­‐   (NSString  *)windowNibName

{

return @"BNRDocument";

}

#pragma mark -­‐  Actions

-­‐         (IBAction)createNewItem:(id)sender

{

// если массив еще не существует, создаем его для хранения новой задачи if (!todoItems) {

todoItems = [NSMutableArray array];

}

[todoItems addObject:@"New Item"];

// -­‐reloadData приказывает табличному представлению обновится

// и запросить у источника данных (которым в данном случае

// является объект BNRDocument) новые данные для отображения [itemTableView reloadData];

// -­‐updateChangeCount: сообщает приложению, содержит ли документ

// несохраненные изменения. NSChangeDone помечает документ как несохраненный

[self updateChangeCount:NSChangeDone];

}

Теперь   реализуйте   обязательные   методы   источника   данных   табличного представления (определяемые протоколом NSTableViewDataSource):

#pragma mark Data Source Methods

-­‐      (NSInteger)numberOfRowsInTableView:(NSTableView    *)tv

{

// табличное представление предназначено для отображения todoItems,

// поэтому количество строк в табличном представлении совподает

// с колличеством объектов в массиве. return [todoItems count];

}

-­‐   (id)tableView:(NSTableView  *)tableView objectValueForTableColumn:(NSTableColumn      *)tableColumn

row:(NSInteger)row

{

// возврощает элемент todoItems, соответствующей ячейки

// которая должна отоброжаться в табличном представлении return [todoItems objectAtIndex:row];

}

-­‐   (void)tableView:(NSTableView  *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn     *)tableColumn

row:(NSInteger)row

{

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

// массив todoItems необходимо обновить

[todoItems replaceObjectAtIndex:row withObject:object];

// А затем пометить документ как содержащий несохраненные изминения. [self updateChangeCount:NSChangeDone];

}

Постройте и запустите программу Окно TahDoodle появляется на экране, вы

можете добавлять и изменять задачи. Однако в приложении отсутствует одна важная возможность: сохранение и повторная загрузка списка задач. Чтобы реализовать ее, необходимо переопределить следующие методы, унаследованные от NDocument – суперкласса BNRDocument:

Обратите внимание: паша реализация метода получает NSError**. В данном случае мы просто возвращаем объект NSError, сгенерированный propertyListWithData: options:format:error:, но также в зависимости от природы ошибки можно было бы создать и вернуть новый объект NSError.

Снова  постройте  и  запустите  приложение.  Теперь  оно  умеет  сохранять  и загружатъ списки задач.

- 2AData "%dataNf;?pe: 2AAtring "%t?pe2ame

error: 2AVrror ""%outVrror

&

// .his metho# is  atte# when o!r #o !ment is being save#

// Ee are eIpe te# to han# the   atter an N6’ata ob;e t wrapping o!r #ata

// so that it an be written to #is/

// If there(s no arra"1 we(tt write o!t an empt" arra" for now if (@to#oItems) 7

to#oItems ) RN6%!tabteLrra" arra"S;

8

// Pa / o!r to#oItems arra" into an N6’ata ob;e t N6’ata ‡#ata ) RN6Propert"-ist6eriatiDation

#ataEithPropert"-istUto#oItems

formatUN6Propert"-istF%-?ormatGv*G& optionsU&

errorUo!t5rrorS;

// ret!rn o!r newt"-pa /e# N6’ata ob;e t ret!rn #ata;

.

- BNND%read@romData: 2AData "%data

of;?pe: 2AAtring "%t?pe2ame error: 2AVrror  ""%outVrror

&

// .his metho# is  atte# when a #o !ment is being toa#e#

// Ee are han#e# an N6’ata ob;e t an# eIpe te# to p!tt o!r #ata o!t of it

// 5Itra t o!r to#oItems

to#oItems ) RN6Propert"-ist6eriatiDation

propert"-istEith’ataU#ata

optionsUN6Propert"-ist%!tabte2ontainers formatUNH–

errorUo!t5rrorS;

// ret!rn s! ess or fait!re #epen#ing on s! ess of the above   att ret!rn (to#oItems @)  nit);

.

Упражнения

Добавьте кнопку удаления выбранной задачи.

Просмотрите справочное описание класса NSError в документации разработчика и создайте экземпляры NSError, возвращаемые в случае неудачной попытки сохранения или загрузки (о чем упоминается в конце главы).

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

По теме:

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