2012-10-26 17 views
14

HyDodaj wydarzenie do kalendarza w Xcode iOS

Mam ten kod do dodawania wydarzeń do kalendarza, ale nie dodaje.

-(void)event 
{ 
    EKEventStore *eventStore = [[EKEventStore alloc] init]; 

    EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
    event.title  = @"Event"; 


    NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init]; 
    [tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"]; 


    NSString *dateandtime =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",starttimestring]; 
    NSString *dateandtimeend =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",endtimestring]; 



    event.startDate = [tempFormatter dateFromString:dateandtime]; 
    event.endDate = [tempFormatter dateFromString:dateandtimeend]; 


    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -60.0f * 24]]; 
    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -15.0f]]; 

    [event setCalendar:[eventStore defaultCalendarForNewEvents]]; 
    NSError *err; 
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 
} 

Z XML pojawia się datę i godzinę w następującym formacie:

DateString: 28.10.2012

starttimestring 15:00

+0

upewnić się, że '' endDate' startDate' i są ważne terminy przed zapisaniem – Maulik

+0

Kiedy i data, data i godzina, i data i godzina są w tym formacie 28.10.2012 15:00 takie same jak w formacie daty – WildWorld

+0

wydrukuj 'NSError ' – Maulik

Odpowiedz

24

jesteś na symulatorze iOS 6 lub na urządzeniu z systemem iOS 6? Jeśli tak, musisz poprosić użytkownika o pozwolenie na korzystanie z magazynu zdarzeń, zanim będzie można zapisać elementy.

Zasadniczo, jeśli requestAccessToEntityType: completion: selector jest dostępny w obiekcie twojego magazynu zdarzeń, wywołujesz tę metodę i podajesz blok kodu, który jest wykonywany, gdy użytkownik udziela pozwolenia, i wtedy zrobiłbyś zapisywanie zdarzeń w tym blok.

Pierwszy dodać ramy EventKit do projektu i nie zapomnij podać import:

#import <EventKit/EventKit.h>

Oto fragment kodu, który kiedyś, że pracował dla mnie:

EKEventStore *eventStore = [[EKEventStore alloc] init]; 
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 
{ 
    // the selector is available, so we must be on iOS 6 or newer 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      if (error) 
      { 
       // display error message here 
      } 
      else if (!granted) 
      { 
       // display access denied error message here 
      } 
      else 
      { 
       // access granted 
       // ***** do the important stuff here ***** 
      } 
     }); 
    }]; 
} 
else 
{ 
    // this code runs in iOS 4 or iOS 5 
    // ***** do the important stuff here ***** 
} 

[eventStore release]; 

Oto blog, który zrobiłem na ten temat:

http://www.dosomethinghere.com/2012/10/08/ios-6-calendar-and-address-book-issues/

+0

dziękuję :) na razie działa dobrze. Wrócę do ciebie jak najszybciej i przetestuję go na iPhonie. Mam pytanie, co jest na końcu kodu na dobrym poziomie? Znam pierwszy, jeśli jeszcze, jeśli i jeszcze. nie jestem pewien co do ostatniego. – WildWorld

+0

Dokonałem edycji powyższego kodu, aby dokładniej wyjaśnić, co się dzieje. Część druga uruchomi się, jeśli aplikacja będzie działać na iOS 4 lub 5, tak jak w tych wersjach systemu operacyjnego, ten selektor zestawu zdarzeń nie będzie istnieć, a ty nadal będziesz chciał, aby twoje ważne rzeczy zostały wykonane w tym przypadku. –

+0

Oczywiście, jeśli to działa, możesz zawsze kliknąć znacznik wyboru po lewej stronie odpowiedzi, aby go zaakceptować. ; D –

2

1) dodać Eventkit ramy i #import <EventKit/EventKit.h>

2) funkcję

-(void)syncWithCalendar { 
    EKEventStore *store = [EKEventStore new]; 
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     if (!granted) { return; } 
     EKEvent *event = [EKEvent eventWithEventStore:store]; 
     event.title = @"Event Title Testing"; //give event title you want 
     event.startDate = [NSDate date]; 
     event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; 
     event.calendar = [store defaultCalendarForNewEvents]; 
     NSError *err = nil; 
     [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
    }]; 
} 

3) połączenia

[self syncWithCalendar];