Динамически отмечайте даты в пользовательском календаре

Я использую Пользовательский календарь Vurig для своего приложения. Мне нужно отметить несколько дат в календаре, но даты должны быть динамическими, то есть данными из файла json (для которого я использую JSONKit), а не жестко закодированными. Как я могу это сделать? Как мне пройтись по календарю, чтобы добавить даты из файла json в массив?

Это код, который у меня есть до сих пор:

JSON:

{
    "events": [
                  {
                    "event": {
                        "month": "10",
                        "day": "15",
                        "detail": "Some Detail"
                    }
                  },
                  {
                    "event": {
                        "month": "10",
                        "day": "25",
                        "detail": "Some blah"
                    }
                  }
    ]
}

КОД:

-(void)calendarView:(VRGCalendarView *)calendarView switchedToMonth:(int)month targetHeight:(float)targetHeight animated:(BOOL)animated {
    NSArray *dates;

        id day, month;

        JSONDecoder* decoder = [[JSONDecoder alloc] init];
        NSData *cdata =[self getJSON];

        NSDictionary* listDictionary = [decoder objectWithData:cdata];
        NSArray* events =[listDictionary objectForKey:@"events"];

        for (NSDictionary *event in events) {
            NSDictionary *eventDetails = [event objectForKey:@"event"];
            day = [eventDetails objectForKey:@"day"];
            month = [eventDetails objectForKey:@"month"];
        }

          //need help here to mark multiple dates in the calendar if month = currentMonth
            NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];
            NSDateComponents *components = [[NSDateComponents alloc] init];
            [components setDay:day]; //data from json file
            [components setMonth:month]; //data from json file
            NSDate *date1 = [calendar dateFromComponents:components];
            dates =  [NSArray arrayWithObjects:date1, nil];


            [calendarView markDates:dates];


}

- (NSData*) getJSON {
    NSError *err = nil;
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSString *filePath = [bundle pathForResource:@"info" ofType:@"json"];
    NSData *jsonData = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:&err];
    return jsonData;
}

person input    schedule 23.10.2013    source источник
comment
проанализируйте json, получите a=dates, добавьте em в массив и отметьте массив   -  person Daij-Djan    schedule 23.10.2013
comment
слишком широко. никто не может дать вам конкретный ответ с кодом с таким небольшим количеством информации. Предоставьте SSCCE, например   -  person Daij-Djan    schedule 23.10.2013
comment
Вам нужно предоставить гораздо больше информации, чтобы на это можно было ответить. Вам необходимо предоставить информацию о структуре ваших данных JSON и о том, где в этих данных находятся даты. У вас есть комментарии в ваших кодовых данных из файла JSON, но вы не указываете, что вы имеете в виду. Предположительно, ваши данные JSON будут содержать массив записей, включающих поля даты. Похоже, что ваш метод должен выбирать набор записей за определенный месяц, поэтому вам нужно будет выбрать записи за текущий месяц.   -  person Duncan C    schedule 23.10.2013
comment
Я отредактировал свой вопрос. Пожалуйста, проверьте.   -  person input    schedule 23.10.2013
comment
У вас нет свободного года? Как это работает?   -  person Carl Veazey    schedule 26.10.2013
comment
Даты указаны по Хиджре. Я не добавил год, потому что хочу, чтобы событие для этого месяца и дня отображалось каждый год.   -  person input    schedule 26.10.2013


Ответы (1)


проанализируйте json, получите даты, добавьте их в массив и отметьте массив

один пример (отказ от ответственности написан встроенным и без конкретной информации)

NSData *jsonData; // comes from somewhere
id parsedJSON = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
id datesAsStringsList = [parsedJSON valueForKey:@"someKeyWhereTheDatesAre"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] initWithDateFormat:@"YYYYMMDD" allowNaturalLanguage:NO];
NSMutableArray *dates = [NSMutableArray array];
for (NSString dateString in datesAsStringsList) {
    id newDate = [formatter dateFromString:dateString];
    if(newDate)
        [dates addObject:newDate];
}
[calendar markDates:dates];
person Daij-Djan    schedule 23.10.2013