Подсчет количества результатов поиска по регламентному отчету

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описывается подсчет количества результатов поиска по регламентному отчету. После запуска примера выполняются следующие операции:

Необходимые файлы

В базовый пример «Отображение регламентного отчёта» необходимо добавить следующие файлы:

Исходный код

Для выполнения примера необходимо создать класс делегата просмотрщика отчетов, в котором реализованы методы протокола <ProceduralDelegate> для получения информации о результатах поиска, класс делегата для поиска по PDF-документу с отправлением уведомлений о событиях поиска, добавить заголовочные файлы этих классов в исходный код  класса ViewController (см. раздел «Отображение регламентного отчёта»), а также разместить в теле метода executeExample класса ViewController следующий код:

// Получаем объект регламентного отчета
MAProceduralReportViewController *proceduralReportController = (MAProceduralReportViewController *)m_controller;
// Получаем массив представлений в регламентном отчете
NSArray *dataViewControllers = [proceduralReportController dataViewControllers];
// Перебираем в цикле представления регламентного отчета
for( UIViewController *controller in dataViewControllers)
{
    // Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
    if([controller isMemberOfClass:[MAProceduralReportDataViewController class]])
    {
        // Получаем представление просмотрщика листов
        MAProceduralReportDataViewController *dataViewController =(MAProceduralReportDataViewController *)controller;
        // Получаем представление просмотрщика регламентных отчетов
        MAProceduralReportDataViewControllerBase *reportDataViewControllerBase = (MAProceduralReportDataViewControllerBase *)dataViewController;
        // Проверяем, доступен ли поиск текста
        if([reportDataViewControllerBase isSearchAvaliable] == YES)
        {
            // Создаем делегат поиска по PDF-документу
            SearchDelegateWithNotifications *searchDelegate = [[SearchDelegateWithNotifications alloc] init];
            // Устанавливаем делегат поиска в просмотрщике регламентных отчетов
            [reportDataViewControllerBase setSearchDelegate:searchDelegate];
            // Создаем делегат просмотрщика отчетов
            ProceduralDelegateImplForSearch *proceduralDelegateImpl = [[ProceduralDelegateImplForSearch alloc] init];
            // Сбрасываем результаты поиска
            [proceduralDelegateImpl reset];
            // Подписываем делегат просмотрщика отчетов на уведомления делегата поиска
            [[NSNotificationCenter defaultCenter] addObserver:proceduralDelegateImpl selector:@selector(searchFinished) name:@"searchFinished" object:nil];
            [[NSNotificationCenter defaultCenter] addObserver:proceduralDelegateImpl selector:@selector(resultsCountChanged) name:@"resultsCountChanged" object:nil];
            // Осуществляем поиск заданной строки в регламентном отчете
            reportDataViewControllerBase.inSearching = YES;
            [reportDataViewControllerBase searchText: @"ia"];
            // Вызываем после паузы метод, продолжающий выполнение примера
            // Во время паузы должно завершиться исполнение потока, в котором осуществляется поиск заданной строки
            [self performSelector:@selector(continueExample:) withObject:proceduralDelegateImpl afterDelay:3];
        }
    }
}

Также необходимо в классе ViewController добавить следующий метод вместе с его реализацией:

// Продолжает выполнение примера
- (void) continueExample: (ProceduralDelegateImplForSearch *) proceduralDelegateImpl
{
    // Выводим в консоль среды разработки количество результатов поиска по регламентному отчету
    NSLog(@"Количество совпадений с заданной строкой: %d",[proceduralDelegateImpl searchResultsCount]);
}

В результате выполнения примера в консоли среды разработки будет выведено сообщение о завершении поиска, а также количество результатов поиска регламентному отчету:

Поиск завершен

Количество совпадений с заданной строкой: 6

См. также:

Примеры использования компонентов