Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описывается прием обработки событий источника данных диаграммы. После запуска примера выполняются следующие операции:
извлекается источник данных диаграммы;
извлекается текстовое описание выборки данных источника;
извлекается текстовое описание выборки данных источника для указанного времени;
осуществляется удаление всех подписчиков источника данных диаграммы;
создается новый объект-наблюдатель событий источника данных диаграммы;
вызывается событие обновления данных диаграммы;
вызывается пользовательское событие диаграммы;
осуществляется удаление наблюдателя из списка наблюдателей событий источника данных диаграммы.
В базовый пример «Отображение экспресс-отчёта» необходимо добавить следующий файл:
DataViewDatasourceExample.h/.m. Делегат источника данных.
Для выполнения примера необходимо создать класс делегата источника данных диаграммы, в котором реализована обработка событий диаграммы, а также добавить заголовочный файл класса в исходный код класса ViewController (см. раздел «Отображение экспресс-отчёта»). Далее необходимо разместить в теле метода executeExample класса ViewController следующий код:
// Получаем массив контроллеров представлений данных
NSArray *controllers =[m_controller dataViewControllers];
// Перебираем в цикле контроллеры представлений данных
for(NSObject *controller in controllers)
{
// Проверяем, является ли текущий контроллер контроллером представления данных в виде диаграммы
if([controller isMemberOfClass:[MAChartDataViewController class]])
{
// Получаем объект контроллера представления данных в виде диаграммы
MAChartDataViewController *chartController = (MAChartDataViewController *)controller;
// Получаем источник данных диаграммы
ChartDataViewDatasource *chart = [[chartController dataSource] datasource];
// Получаем текстовое описание выборки данных
NSString *chartDataSelectionTitle = [chart dataSelectionTitle];
// Получаем текстовое описание выборки данных для указанного времени
NSString *chartDataSelectionTitleWithTimeIndex = [chart dataSelectionTitleWithTimeaxisIndex:1];
// Выводим в консоль среды разработки полученную информацию
NSLog(@"Описание выборки данных: %@", chartDataSelectionTitle);
NSLog(@"Описание выборки данных, соответствующее положению оси времени с индексом 1: %@", chartDataSelectionTitleWithTimeIndex);
// Удаляем всех подписчиков источника данных диаграммы
[chart removeEventObservers];
// Создаем объект-наблюдатель событий источника данных диаграммы
DataViewDatasourceExample *exampleDelegate = [[DataViewDatasourceExample alloc] initWithName: @"chartDatasource"];
// Подписываем объект-наблюдатель на события источника данных
[chart addEventObserver:exampleDelegate];
// Вызываем событие обновления данных
[chart pivotTableUpdated];
// Вызываем пользовательское событие
[chart sendEvent:2];
// Удаляем наблюдателя из списка наблюдателей событий источника данных диаграммы
[chart removeEventObserver: exampleDelegate];
// Вызываем пользовательское событие
[chart sendEvent:2];
break;
}
}
В результате выполнения примера в консоли среды разработки будет выведена информация об источнике данных, а также сообщения о событиях источника данных диаграммы:
Описание выборки данных: GDP per capita, PPP (constant 2005 international $)
Описание выборки данных, соответствующее положению оси времени с индексом 1: 1
chartDatasource: Cобытие обновления данных, код события: 1
chartDatasource: Пользовательское событие, код события: 2
Попытка повторного вызова пользовательского события не приводит к выполнению кода объекта-наблюдателя, поскольку он был удален из списка наблюдателей событий источника данных диаграммы с помощью метода DataViewDatasource.removeEventObserver:. Аналогичный результат будет получен, если в исходном коде заменить строку:
[chart removeEventObserver: exampleDelegate];
на следующий код:
[chart removeEventObservers];
См. также: