I have to update calendar based on response(events) from the server. I made an array to hold all the event objects and iterating it to save the events on the calendar. Its working but problem is its creating only one random event not all.
- I have to show all the events
(most important right now)
. - How to use background queue to update the calendar.
- I have to update calendar on every 5minutes, so methods must be execute on every 5 minutes in background.
- Making call to the server to create events when my user will loggedIn to the app, in home-page
viewDidLoad
method. Does calendar takes time to create events, what ll happen if user loggedIn and instantly quit the app. Calendar would be updated or not? I think the Home-page won't be load until all the events on calendar is created?
Here is the code.
- (void)calUpdateWebService
{
NSString *urlString = @"http://www.xxxx.com";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject];
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error)
{
NSDictionary *responseJson = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSMutableArray *eventArray = responseJson[@"result"];
eventData = [NSMutableArray new];
for(NSDictionary *eventDict in eventArray)
{
NSDictionary *eventDic =@{@"startDate":[eventDict valueForKey:@"start_date"],@"endDate":[eventDict valueForKey:@"end_date"],@"eventSlot":[eventDict valueForKey:@"slot"],@"eventTitle":[eventDict valueForKey:@"package_title"]};
[eventData addObject:eventDic] ;
}
/** call method to create events**/
[self addBooking];
}
}];
[dataTask resume];
}
/** method to create events **/
-(void)addBooking
{
EKEventStore *eventStore = [[EKEventStore alloc]init];
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted)
{
addEventGranted =1;
EKEvent *event =[EKEvent eventWithEventStore:eventStore];
for (int i = 0; i<[eventData count]; ++i)
{
[event setTitle:[[eventData objectAtIndex:i] valueForKey:@"eventTitle"]];
NSString *startDate = [[eventData objectAtIndex:i] valueForKey:@"startDate"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *eventStrtdate = [dateFormatter dateFromString:startDate];
[event setStartDate:eventStrtdate];
[event setEndDate:[[NSDate alloc]initWithTimeInterval:1200 sinceDate:event.startDate]];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}
}
}];
}@end