2014-07-21 33 views
0

我正在连接MBCalendarKit和核心数据。MBCalendarKit:将CKCalendarDataSource连接到核心数据

这是建立事件的字典的代码:

for (Task *task in _taskArray) 
{ 
    _event = [CKCalendarEvent eventWithTitle:[task valueForKey:@"title"] andDate:[task valueForKey:@"startDate"] andInfo:nil]; 
    [_eventsArray addObject:_event]; 
} 
// Moving events to Dictionary 
[_calendarData setObject:_eventsArray forKey:_event.date]; 

当实现该方法CKCalendarDataSource结果是不期望的一个。我获得日历中每个日期的数组中的所有事件,如下所示。

- (NSArray *)calendarView:(CKCalendarView *)calendarView eventsForDate:(NSDate *)date { 
    return _calendarData[_event.date]; 
} 

enter image description here

回答

0

由于CKCalendarDataSource期待一个特定的字典格式我不得不通过eventsArray迭代,而不是仅仅把它传递给_calendarData。

{ 
    "July 15, 2014" =  (
     "<CKCalendarEvent: 0x1123128e0>" 
    ); 
    "July 16, 2014" =  (
     "<CKCalendarEvent: 0x11230fb10>", 
     "<CKCalendarEvent: 0x11230ff00>" 

    "July 18, 2014" =  (
     "<CKCalendarEvent: 0x11230d880>", 
     "<CKCalendarEvent: 0x11230df30>" 
    ); 
} 

[eventsArray enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) { 

    if ([_calendarData objectForKey:[[eventsArray objectAtIndex:idx]date]]) { 
     // Dictionary already contains object with this date 

     NSMutableArray *existingDate = [[NSMutableArray alloc]init]; 
     [existingDate addObjectsFromArray:[_calendarData objectForKey:[[eventsArray objectAtIndex:idx]date]]]; 
     [existingDate addObject:object]; 

     [_calendarData setObject:existingDate forKey:[[eventsArray objectAtIndex:idx]date]]; 
    } 

    else { 
     NSMutableArray *uniqueDate = [[NSMutableArray alloc]init]; 
     [uniqueDate addObject:object]; 
     [_calendarData setObject:uniqueDate forKey:[[eventsArray objectAtIndex:idx]date]]; 
    } 
}];