Проблема Создание событий с использованием 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])