Проблема Создание событий с использованием MBCalendarKit

Я использую MBCalendarKit в своем приложении, и я могу создавать такие события:

CKCalendarEvent* aCKCalendarEvent = [[CKCalendarEvent alloc] init];
    [_infoDict setObject:@"Joint Meetings with KY State Horticulture Society, KY Vegetable Growers Association, KY Vineyard Society, and KY Farmer Market Association \nEmbassy Suites\nLexington, KY" forKey:@"Jan Joint"];
    aCKCalendarEvent.date = [dateformatter dateFromString: @"01/06/2014"];
    aCKCalendarEvent.title = @"Joint Meetings";
    aCKCalendarEvent.info = [_infoDict objectForKey:@"Jan Joint"];
    [eventsArray addObject: aCKCalendarEvent];
    [_eventsDict setObject: eventsArray forKey: [NSDate dateWithDay:06 month:01 year:2014]];

Я могу создать другое событие в тот же день, как это:

[_infoDict setObject:@"Washington, D.C." forKey:@"Congress Convenes"];
    aCKCalendarEvent = [[CKCalendarEvent alloc] init];
    aCKCalendarEvent.date = [dateformatter dateFromString: @"01/06/2014"];
    aCKCalendarEvent.title = @"113th Congress Convenes";
    [eventsArray addObject: aCKCalendarEvent];
    [_eventsDict setObject: eventsArray forKey: [NSDate dateWithDay:06 month:01 year:2014]];

и тогда я могу создать другое событие в другой день, например:

eventsArray = [[NSMutableArray alloc] init];
    [_infoDict setObject:@"Hilton Hotel \nMemphis, TN" forKey:@"Forage & Grassland"];
    aCKCalendarEvent = [[CKCalendarEvent alloc] init];
    aCKCalendarEvent.date = [dateformatter dateFromString: @"01/12/2014"];
    aCKCalendarEvent.title = @"American Forage & Grassland Council Annual Conference";
    [eventsArray addObject: aCKCalendarEvent];
    [_eventsDict setObject: eventsArray forKey: [NSDate dateWithDay:12 month:01 year:2014]];

Я пытаюсь перебрать файл plist, который содержит все события, чтобы создать их все. Я могу сделать это так:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Events" ofType:@"plist"];
    NSDictionary *dictPri = [[NSMutableDictionary alloc]initWithContentsOfFile:path];
    NSMutableArray *arrEvents = [[NSMutableArray alloc] initWithArray:[dictPri objectForKey:@"List"]];

    // Loop through each item in List array of Events.plist

    for (NSDictionary *dict in arrEvents)
    {
        NSString *titleString = nil;
        NSString *date = nil;
        titleString = [NSString stringWithFormat:@"%@",[dict objectForKey:@"Title"]];
        date = [NSString stringWithFormat:@"%@",[dict objectForKey:@"Date"]];
        // NSDate *dateVariable = [dateformatter dateFromString:date];

        // Create events

        eventsArray = [[NSMutableArray alloc] init];
        aCKCalendarEvent = [[CKCalendarEvent alloc] init];
        aCKCalendarEvent.title = titleString;
        aCKCalendarEvent.date = [dateformatter dateFromString: date];
        [eventsArray addObject: aCKCalendarEvent];
        [_eventsDict setObject:eventsArray forKey:aCKCalendarEvent.date];
    }

Проблема в том, что если у меня есть несколько событий в один и тот же день, отображается только самое новое. Я могу вынуть линию eventsArray = [[NSMutableArray alloc] init]; но затем новые события не только появляются в правильный день с другими событиями, но и в другие дни. Поэтому я подумал, что могу добавить что-то вроде этого, чтобы проверить, нужна ли мне эта строка, а затем добавить событие в eventsDict, но я получаю -[CKCalendarEvent isEqualToDate:]: unrecognized selector sent to instance 0xc6bb880 на if ([[eventsArray objectAtIndex:i]isEqualToDate:aCKCalendarEvent.date]):

BOOL dateExists;

        for (int i = 0; i < [eventsArray count]; i++)
        {
            if ([[eventsArray objectAtIndex:i]isEqualToDate:aCKCalendarEvent.date])
            {
                // Array already contains object with this date

                dateExists = YES;
            }
            else
            {
                dateExists = NO;
            }

            NSLog(@"%c", dateExists);
        }

        if (dateExists == YES)
        {
            [eventsArray addObject:aCKCalendarEvent];
            [_eventsDict setObject:eventsArray forKey:aCKCalendarEvent.date];
        }
        else
        {
            eventsArray = [[NSMutableArray alloc]init];
            [eventsArray addObject:aCKCalendarEvent];
            [_eventsDict setObject:eventsArray forKey:aCKCalendarEvent.date];
        }

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

1 ответ

Решение

Вы сравниваете событие с датой. Смотрите ниже код, который сравнивает дату события.

if ([[(CKCalendarEvent *)[eventsArray objectAtIndex:i] date]isEqualToDate:aCKCalendarEvent.date])
Другие вопросы по тегам