Параметры получения данных из файла

Описание: свойства и методы для получения данных из файла для карты.

Файл «MapDataSource.h»

#import <MapCharting/MapChartDataSource.h>
@interface MapDataSource : NSObject<MapChartDataSource> {
    int m_index;
    NSMutableDictionary *m_fictionalData; // Словарь данных
    NSMutableArray *m_timelineTitles; // Массив подписей для временной шкалы
    NSMutableArray *m_timeLineDate; // Массив дат
}
// Загружает данные из файла с указанным именем
- (id) initWithFileName:(NSString *) name;
// Определяет минимальное и максимальное значения данных
- (void) prepare;
@property (readonly,assign) double minValue; // Минимальное значение данных
@property (readonly,assign) double maxValue; // Максимальное значение данных
@end

Файл «MapDataSource.m»

#import "MapDataSource.h"
@implementation MapDataSource
@synthesize minValue = m_minValue;
@synthesize maxValue = m_maxValue;
// Загружает данные из файла с указанным именем
- (id)initWithFileName:(NSString *)name
{
    self = [super init];
    if (self) {
        // Получаем путь к файлу
        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
        // Читаем содержимое файла
        NSString *dataString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        m_timeLineDate = [NSMutableArray new];
        // Разбиваем строку с содержимым файла на подстроки, разделённые символом переноса строки
        NSArray *lines = [dataString componentsSeparatedByString:@"\n"];
        NSMutableArray *data = [NSMutableArray new];
        for (NSString *line in lines) {
            // Разбиваем каждую строку на подстроки, разделённые символом ";"
            [data addObject:[line componentsSeparatedByString:@";"]];
        }
        m_timelineTitles = [[data objectAtIndex:0] mutableCopy];
        [m_timelineTitles removeObjectAtIndex:0];
        m_fictionalData = [NSMutableDictionary new];
        // Заносим данные по каждой стране в словарь
        for (int i = 1; i < [data count]; i++) {
            NSArray *line = [data objectAtIndex:i];
            NSString *key = (NSString*)[line objectAtIndex:0];
            NSMutableArray *values = [NSMutableArray new];
            for (int j = 1; j < [line count]; j++) {
                [values addObject:[NSNumber numberWithFloat:[[line objectAtIndex:j] floatValue]] ];
            }
            [m_fictionalData setValue:values forKey:key];
        }
    }
    return self;
}
// Определяет минимальное и максимальное значения данных
- (void) prepare
{
    BOOL startPrepare = YES;
    for (NSArray *series in [m_fictionalData allValues]) {
        for (int i = 0; i < [series count]; i++) {
            if(startPrepare)
            {
                m_minValue = [[series objectAtIndex:i] doubleValue];
                m_maxValue = [[series objectAtIndex:i] doubleValue];
                startPrepare = NO;
                continue;
            }
            double val = [[series objectAtIndex:i] doubleValue];
            if(m_minValue > val)
            m_minValue = val;
            if(m_maxValue < val)
            m_maxValue = val;
        }
    }
}
// Возвращает массив дат
- (NSArray *) timestampArray
{
    return m_timeLineDate;
}
// Возвращает массив подписей для временной шкалы
- (NSArray *) timestampTitles
{
    return m_timelineTitles;
}
// Устанавливает индекс, указывающий номер значения в массиве данных по стране
- (void) setIndex:(int)index
{
    m_index = index;
}
// Возвращает данные для указанной страны за текущий год их измерения
- (NSNumber *)valueWithId:(NSNumber *)objectId
{
    NSArray *values = [m_fictionalData objectForKey:objectId];
    if (values != nil) {
        return [values objectAtIndex:m_index];
        } else {
        return [NSNumber numberWithInt:0];
    }
}
// Возвращает данные для страны за все даты их измерения
- (NSArray *)seriesWithId:(NSNumber *)objectId
{
    NSMutableArray *series = [NSMutableArray new];
    series = [m_fictionalData valueForKey:[NSString stringWithFormat:@"%@", objectId]];
    return series;
}
@end

См. также:

Создание всплывающего окна для карты