Search code examples
iosobjective-ciphonecalendarmbcalendarkit

How to add events by JSON in MBCalendarKit


I used a storyboard and ios 9 , Xcode 7.2, in this project used a calendar view and event show by web server fetch data. I added calendar kit framework and also two file add my project first is CKDemoViewController.h and second is CKDemoViewController.m, This time create a static events. but i want to create a dynamic events. so how it possible. I tried to many times but could not create dynamic events. How it possible, please help, Thank You.

CKDemoViewController.m

#import "CKDemoViewController.h"

#import "NSCalendarCategories.h"

#import "NSDate+Components.h"

@interface CKDemoViewController () <CKCalendarViewDelegate, CKCalendarViewDataSource>
{
NSArray*date;
NSArray*title;
NSArray*img;
NSArray*des;
NSArray*evnt_ary;
NSArray*timeary;


}
@property (nonatomic, strong) NSMutableDictionary *data;
@end

@implementation CKDemoViewController

- (void)viewDidLoad
{
[super viewDidLoad];

NSURLRequest *req=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://edutimeapp.com/toshow/chamber-of-commerc/ws/fetch_event.php"]];
response =[[NSMutableData alloc]init];
[NSURLConnection connectionWithRequest:req delegate:self];

self.data = [[NSMutableDictionary alloc] init];

[self setDataSource:self];
[self setDelegate:self];

//  An event for the new MBCalendarKit release.
NSString *title = NSLocalizedString(@"Release MBCalendarKit 2.2.4", @"");
NSDate *date = [NSDate dateWithDay: 12 month:11 year:2016];
CKCalendarEvent *releaseUpdatedCalendarKit = [CKCalendarEvent eventWithTitle:title andDate:date andInfo:nil];

//  An event for the new Hunger Games movie.
NSString *title2 = NSLocalizedString(@"The Hunger Games: Mockingjay, Part 1", @"");
NSDate *date2 = [NSDate dateWithDay:21 month:11 year:2014];
CKCalendarEvent *mockingJay = [CKCalendarEvent eventWithTitle:title2 andDate:date2 andInfo:nil];

//  Integrate MBCalendarKit
NSString *integrationTitle = NSLocalizedString(@"Integrate MBCalendarKit", @"");
NSDate *integrationDate = date2;
CKCalendarEvent *integrationEvent = [CKCalendarEvent eventWithTitle:integrationTitle andDate:integrationDate andInfo:nil];

//  An event for the new MBCalendarKit release.
NSString *title3 = NSLocalizedString(@"Fix bug where events don't show up immediately.", @"");
NSDate *date3 = [NSDate dateWithDay:29 month:11 year:2014];
CKCalendarEvent *fixBug = [CKCalendarEvent eventWithTitle:title3 andDate:date3 andInfo:nil];

self.data[date] = @[releaseUpdatedCalendarKit];
self.data[date2] = @[mockingJay, integrationEvent];
self.data[date3] = @[fixBug];
 }

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData   *)data
{
[response appendData:data];
NSLog(@"error receving data %@",response);
 }

 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
 {

 }
 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
 {
NSError *error;

NSLog(@"Error in receiving data %@",error);
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves  error:&error];
NSLog(@"response data %@",json);

NSArray *results = [json objectForKey:@"status"];
title = [[results valueForKey:@"event"]valueForKey:@"event_title"];

NSLog(@"event name fetch %@",title);


date =[[results valueForKey:@"event"]valueForKey:@"event_date"];


NSLog(@"event fetch %@",date);
img =[[results valueForKey:@"event"]valueForKey:@"img"];

des =[[results valueForKey:@"event"]valueForKey:@"event_detail"];
evnt_ary =[[results valueForKey:@"event"]valueForKey:@"event_name"];
timeary =[[results valueForKey:@"event"]valueForKey:@"event_time"];
 }


#pragma mark - CKCalendarViewDataSource

- (NSArray *)calendarView:(CKCalendarView *)calendarView eventsForDate:(NSDate *)date
{
return [self data][date];
}

 #pragma mark - CKCalendarViewDelegate

// Called before/after the selected date changes
- (void)calendarView:(CKCalendarView *)CalendarView willSelectDate:(NSDate *)date
  {

 }

 - (void)calendarView:(CKCalendarView *)CalendarView didSelectDate:(NSDate  *)date
{

}

//  A row is selected in the events table. (Use to push a detail view or whatever.)
 - (void)calendarView:(CKCalendarView *)CalendarView didSelectEvent:(CKCalendarEvent *)event
{

}
 @end

Solution

  • Refer this link for code only one event set another your logic:

    https://www.dropbox.com/home?preview=proj.zip

    I am also solve this question in MBCalendar kit framework how to add in my project