Monday, September 19, 2011

Programmatically create iCal event

If you want iCal like calendar using iPhone sdk download it from 
git hub repository: Click here


After downloading iCal want to create programmatically event then check this:


Process for creating programmatically event:


-(void)initCalendar {

 // An array of 1 dictionary object, containing START and END values.
 NSMutableArray* pvDict  = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:PV_URL ]];

 // Check if the private view event already exists in the default calendar.
 // Then set the calendar button state.

 // Get a entry point to the Calendar database.
 self.store = [[EKEventStore alloc ] init ];

 // Get an array of all the calendars.
 NSArray *calendars = store.calendars;

 // Get the default calendar, set by the user in preferences.
 EKCalendar *defaultCal = store.defaultCalendarForNewEvents;

 // Find out if this calendar is modifiable.
  BOOL isDefaultCalModifiable = defaultCal.allowsContentModifications ;

 // Create an event in the default calendar.

  self.event = [ EKEvent eventWithEventStore:store ];

 self.event.title = CHELSEA_SPACE ;
 self.event.location = CHELSEA_ADDRESS ;

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"yyy-MM-dd HH:mm:ss.S"];

 NSString *startString = [[ pvDict objectAtIndex:0] objectForKey:@"starts" ];
 NSDate *dateStart = [dateFormatter dateFromString:startString];

 NSString *endString = [[ pvDict objectAtIndex:0] objectForKey:@"ends" ];
 NSDate *dateEnd = [dateFormatter dateFromString:endString];

    self.event.startDate = dateStart;
 self.event.endDate   = dateEnd;

 self.event.calendar = defaultCal ;

 // Alternative code to add 2.5 hours to start time.
 // [[NSDate alloc] initWithTimeInterval:9000 sinceDate:event.startDate];

 // Search for events which match this date/time start and end.
 // Compare the matched events by event TITLE.

 NSPredicate *predicate = [store predicateForEventsWithStartDate:event.startDate
           endDate:event.endDate calendars:calendars];

 NSArray *matchingEvents = [store eventsMatchingPredicate:predicate];

 self.calendarButton.enabled = NO;

 if( ! isDefaultCalModifiable ) {
  // The default calendar is not modifiable
  return ;
 }

 if ( [ matchingEvents count ] > 0 ) {

  // There are already event(s) which match this date/time start and end.
   // Check if this event is the PV

  EKEvent *anEvent;
  int j;

  for ( j=0; j < [ matchingEvents count]; j++) {

   anEvent = [ matchingEvents objectAtIndex:] ;
   if([ CHELSEA_SPACE isEqualToString: anEvent.title ]) {
    // PV event already exists in calendar.
    return;
   }
  }
  [ anEvent release ];
 }

 self.calendarButton.enabled = YES;

 [ pvDict release ];
}

-(void)addEventToCalendar:(id)sender {

 NSError *error;
 BOOL saved = [self.store saveEvent:self.event span:EKSpanThisEvent error:&error];

 NSLog(@"Saved calendar event = %@\n"(saved ? @"YES" : @"NO"));
 self.calendarButton.enabled = NO;

}


Calculate processing time for execution of any task - iPhone SDK

        uint64_t start = mach_absolute_time();
     
        // Your code here, loop here, anything to process
     
        uint64_t end = mach_absolute_time();
        uint64_t elapsed = end - start;
     
        mach_timebase_info_data_t info;
        if (mach_timebase_info (&info) != KERN_SUCCESS) {
                printf ("mach_timebase_info failed\n");
        }
     
        uint64_t nanosecs = elapsed * info.numer / info.denom;
        uint64_t millisecs = nanosecs / 1000000;
     
        NSLog(@"Process Time: %ld milisecond", millisecs);


Convert csv file to plist dictionary using Objective - C

    NSString *strBundle = [[NSBundle mainBundle] pathForResource:@"MyCsvFile" ofType:@"csv"];
    NSString *fileObj = [NSString stringWithContentsOfFile:strBundle
                                                  encoding:NSUTF8StringEncoding
                                                     error:nil];
    NSArray *objectArray = [fileObj componentsSeparatedByString:@"\n"];
    NSLog(@"%@", objectArray);
    NSMutableDictionary *dataDictionary = [[NSMutableDictionary alloc] init];
    for (int i = 0; i < [objectArray count]; i++) {
           NSArray *tempObj = [[objectArray objectAtIndex:i] componentsSeparatedByString:@","];
        if (!= [objectArray count] - 1) {
            [dataDictionary setValue:[tempObj objectAtIndex:1] forKey:[tempObj objectAtIndex:0]];
        }
         
    }
    NSLog(@"%@", dataDictionary);
   
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];
   
    [dataDictionary writeToFile:[documentsDir stringByAppendingPathComponent:@"WordDictionary.plist"] atomically:YES];

  CSV FORMAT :
    ability,ablty
    able,abl
    about,abt
    above,abv
    according,acc
    account,acc
    across,acrss
    act,act

  OUTPUT : plist Dictionary