How to set marker on particular date in Tapku calender - iphone

In my application i use Tapku calendar to display a date in calender.
I want to display particular date in calendar like,
I have date 2012-11-01 than Marker comes on 2012-11-01 in calender.
Please suggest me How can i do that with Tapku caleder.

- (NSArray*) calendarMonthView:(TKCalendarMonthView*)monthView marksFromDate:(NSDate*)startDate toDate:(NSDate*)lastDate
{
[self generateRandomDataForStartDate:startDate endDate:lastDate];
return dataArray;
}
- (void) generateRandomDataForStartDate:(NSDate*)start endDate:(NSDate*)end{
// this function sets up dataArray & dataDictionary
// dataArray: has boolean markers for each day to pass to the calendar view (via the delegate function)
// dataDictionary: has items that are associated with date keys (for tableview)
NSLog(#"Delegate Range: %# %# %d",start,end,[start daysBetweenDate:end]);
self.dataArray = [NSMutableArray array];
self.dataDictionary = [NSMutableDictionary dictionary];
NSDate *d = start;
while(YES){
int r = arc4random();
if(r % 3==1){
[self.dataDictionary setObject:[NSArray arrayWithObjects:#"Item one",#"Item two",nil] forKey:d];
[self.dataArray addObject:[NSNumber numberWithBool:YES]];
}else if(r%4==1){
[self.dataDictionary setObject:[NSArray arrayWithObjects:#"Item one",nil] forKey:d];
[self.dataArray addObject:[NSNumber numberWithBool:YES]];
}else
[self.dataArray addObject:[NSNumber numberWithBool:NO]];
TKDateInformation info = [d dateInformationWithTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
info.day++;
d = [NSDate dateFromDateInformation:info timeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
if([d compare:end]==NSOrderedDescending) break;
}
}

Related

iPhone - How to import native calendar events to my iphone app?

I am doing one simple application using iPhone calendar, where I need to import the iPhone native calendar events into my iPhone app. How can I do this. I have a piece of code but it doesn't seems to be working. I have added some events into my iPhone native calendar. But when i retrieve it's not fetching anything. Here is the piece of code.
-(IBAction)importCalEvents:(id)sender
{
NSArray *caleandarsArray = [[NSArray alloc] init];
caleandarsArray = [[eventStore calendars] retain];
NSLog(#"Calendars from Array : %#", caleandarsArray);
for (EKCalendar *CalendarEK in caleandarsArray)
{
NSLog(#"Calendar Title : %#", CalendarEK.title);
}
}
you can fetch all the calendar events like this.
import these 2 framworks (add if not exists into your project).
1 EventKit/EventKit.h
2) EventKitUI/EventKitUI.h
call this function on button click
-(void)EventList{
EKEventStore *eventStore = [[EKEventStore alloc] init];
NSDate *startDate = [[NSDate alloc] init];
NSDate *endDate = [[NSDate alloc] initWithTimeInterval:3600 sinceDate:startDate];
NSArray *calendars = [eventStore calendars];
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate
endDate:endDate calendars:calendars];
NSArray *matchingEvents = [eventStore eventsMatchingPredicate:predicate];
EKEvent *anEvent;
NSLog(#"Total Events >> %d",[matchingEvents count]);
for (int j=0; j < [ matchingEvents count]; j++) {
anEvent = [matchingEvents objectAtIndex:j];
NSLog(#"Title >>>%#",anEvent.title);
NSLog(#"start date is %# \n End Date is >>> %#",anEvent.startDate,anEvent.endDate);
}
}
And set the startDate and EndDate as per your Requirement.
so you can get all the detatils you want.
Best Luck..

parsing calender events

In my application I am retrieving all calender events using eventkit framework. Now I have parse it in to json to upload it to server. what is the best way to do this, kindly give me an idea if there are any parser libraries or framework which can parse calendar events. Below is the code i used to retrieve events
- (NSMutableArray *)fetchallevents {
NSDate *start = [NSDate distantPast];
NSLog(#"start date is : %#",start);
NSDate *finish = [NSDate distantFuture];
NSLog(#"start date is : %#",finish);
// use Dictionary for remove duplicates produced by events covered more one year segment
NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024];
NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:start];
int seconds_in_year = 60*60*24*365;
// enumerate events by one year segment because iOS do not support predicate longer than 4 year !
while ([currentStart compare:finish] == NSOrderedAscending) {
NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:currentStart];
if ([currentFinish compare:finish] == NSOrderedDescending) {
currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:finish];
}
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:nil];
[eventStore enumerateEventsMatchingPredicate:predicate
usingBlock:^(EKEvent *event, BOOL *stop) {
if (event) {
[eventsDict setObject:event forKey:event.eventIdentifier]; } }];
currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart];
}
NSMutableArray *events =[[eventsDict allValues]mutableCopy];
//NSLog(#"the evenets for the day is : %#", events);
return events;
}

Date array sorting issue, iPhone sdk

I have an array that contains different date values. And I have used the following code to sort the date array, its done.
combinedArr = [[NSMutableArray alloc]init];
NSInteger counts = [pbTitle count];
for (int i = 0; i < counts; i++) {
CustomObject *customobject2 = [CustomObject customObjectWithName:
[pbTitle objectAtIndex:i] andDate:[pbstartDate objectAtIndex:i]];
[combinedArr addObject:customobject2];
}
[combinedArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
return [[(CustomObject*)obj1 date]compare: [(CustomObject*)obj2 date]];
}];
NSLog(#"Results: %#", combinedArr);
Now the result is in the combinedArr, I need to check the each value with current system time and need to load into two different arrays, and load these two arrays into two sections of a tableView. How can I implement that? Please help me to find a solution.
I think that the simplest and the fastest (shorter running time) solution is to create 2 separate arrays from the beginning and sort each one separately.
Like this:
NSDate *currentDate = [NSDate date];
NSMutableArray *pastArray = [[NSMutableArray alloc] init];
NSMutableArray *futureArray = [[NSMutableArray alloc] init];
NSInteger counts = [pbTitle count];
// Fill the arrays
for (int i = 0; i < counts; i++) {
NSDate *customOnjectDate = [pbstartDate objectAtIndex:i];
CustomObject *customobject2 = [CustomObject customObjectWithName:[pbTitle objectAtIndex:i] andDate:customOnjectDate];
NSMutableArray *array = ([customOnjectDate compare:currentDate] == NSOrderedAscending ? pastArray : futureArray);
[array addObject:customobject2];
}
// Sort the arrays
[pastArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 date] compare:[obj2 date]];
}];
[futureArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 date] compare:[obj2 date]];
}];
// Use the arrays
NSLog(#"pastArray: %#", pastArray);
NSLog(#"futureArray: %#", futureArray);
// Don't forget to release the arrays after you use them
[pastArray release];
[futureArray release];

Google calender event description retrieval in objective c [duplicate]

I am retrieving google calendar events using gdata library in objective c for an iphone application, I am doing it like this,
- (void)eventsTicket:(GDataServiceTicket *)ticket finishedWithEntries:(GDataFeedCalendarEvent *)feed error:(NSError *)error
{
if( !error ){
NSMutableDictionary *dictionary;
for( int section=0; section<[data count]; section++ ){
NSMutableDictionary *nextDictionary = [data objectAtIndex:section];
GDataServiceTicket *nextTicket = [nextDictionary objectForKey:KEY_TICKET];
if( nextTicket==ticket ){ // We've found the calendar these events are meant for...
dictionary = nextDictionary;
break;
}
}
if( !dictionary )
return; // This should never happen. It means we couldn't find the ticket it relates to.
int count = [[feed entries] count]; // count for the number of events for the callendar
//099999999999999999999999999999999966666666666666669999999999999999999999999666666666666666699999999999999999999999999999999999999999999999999999999999
daily_trackAppDelegate *controller =(daily_trackAppDelegate *) [[UIApplication sharedApplication] delegate];
NSMutableArray *events = [dictionary objectForKey:KEY_EVENTS];
for( int i=0; i<count; i++ ){
[events addObject:[[feed entries] objectAtIndex:i]]; //loads the array with events
}
for( int i=0; i<count; i++ ){
NSMutableArray *temporary=[[NSMutableArray alloc]init];
[temporary removeAllObjects];
GDataEntryCalendarEvent *event = [events objectAtIndex:i];
// [controller.googlearray addObject:event];
GDataWhen *when = [[event objectsForExtensionClass:[GDataWhen class]] objectAtIndex:0];
if( when ){
NSDate *date1 = [[when startTime] date];
NSDate *date = [date1 dateByAddingTimeInterval:18000.0];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"yy-MM-dd-HH-mm"];
[temporary addObject:date];///1 date
NSDate *date11=[[when endTime] date];
NSDate *date2 = [date11 dateByAddingTimeInterval:18000.0];
// [controller.array_objject.google_events insertObject:date atIndex:i];///2 date
[temporary addObject:date2];///1 date
[dateFormatter release];
}
//[controller.array_objject.google_events insertObject:[[event title] stringValue] atIndex:i]; /////3 title
[temporary addObject:[[event title] stringValue]];///1 date
GDataWhere *addr = [[event locations] objectAtIndex:0];
if( addr )
//[controller.array_objject.google_events insertObject:[addr stringValue] atIndex:i];///// 4 location
[temporary addObject:[addr stringValue]];
[controller.googlearray addObject:temporary];///// 4 location
}
NSURL *nextURL = [[feed nextLink] URL];
if( nextURL ){ // There are more events in the calendar... Fetch again. FETCHING*********************************
GDataServiceTicket *newTicket = [googleCalendarService fetchFeedWithURL:nextURL delegate:self didFinishSelector:#selector( eventsTicket:finishedWithEntries:error: )]; // Right back here...
// Update the ticket in the dictionary for the next batch.
[dictionary setObject:newTicket forKey:KEY_TICKET];
}
} else
[self handleError:error];
}
now I am retrieving the start and ending time, title, location etc. of the event here, but I also want to retrieve the description of the event, means if user enters any description while creating event, so in that case I want to retrieve that description or details of event too, I tried hard but in vain.
The description of an event is available as [[eventEntry content] stringValue]

Get album year for item in iPod library?

Trying the following code:
// Per albums
MPMediaQuery *albumsQuery = [MPMediaQuery albumsQuery];
NSArray *collections = [albumsQuery collections];
for (MPMediaItemCollection *collection in collections)
{
NSDate *collectionReleaseDate = [collection valueForProperty: MPMediaItemPropertyReleaseDate];
NSLog(#"collection release date: %#", collectionReleaseDate);
MPMediaItem *representativeItem = [collection representativeItem];
NSDate *representativeItemReleaseDate = [representativeItem valueForProperty: MPMediaItemPropertyReleaseDate];
NSLog(#"representativeItem release date: %#", representativeItemReleaseDate);
}
// Just per item
MPMediaQuery *query = [[MPMediaQuery alloc] init];
NSArray *items = [query items];
for (MPMediaItem *item in items)
{
NSDate *date = [item valueForProperty: MPMediaItemPropertyReleaseDate];
NSLog(#"release date: %#", date);
}
In all cases I get nil's for NSDates...
But in the iPod library I can see dates, so the information must be available.
What is the correct way to obtain it?
Well, I think I've figured it out. I was thinking that 'Year' column in iTunes corresponds to MPMediaItemPropertyReleaseDate in API - but it's wrong. My items actually weren't having release date info.
I also found how to obtain 'Year' information (which I needed), but unfortunately in undocumented way:
MPMediaItem *item = ...;
NSNumber *yearNumber = [item valueForProperty:#"year"];
if (yearNumber && [yearNumber isKindOfClass:[NSNumber class]])
{
int year = [yearNumber intValue];
if (year != 0)
{
// do something with year
}
}