2012-10-26 18 views
14

HyEreignis zum Kalender hinzufügen in xcode iOS

Ich habe diesen Code zum Hinzufügen von Ereignissen zum Kalender, aber es fügt nicht hinzu.

-(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]; 
} 

Vom XML ich das Datum und die Uhrzeit in diesem Format erhalten:

Datestring: 28.10.2012

starttimestring 15:00

+0

sicherstellen, dass Ihre 'startDate' und' endDate' sind gültige Daten vor dem Speichern – Maulik

+0

Wenn ich NSlog dateandtime und dateandtimeend habe, habe ich in diesem Format 28.10.2012 15:00 das gleiche wie das Datumsformat – WildWorld

+0

drucken Sie den 'NSError ' – Maulik

Antwort

24

Sind Sie auf dem iOS 6-Simulator oder auf einem Gerät mit iOS 6? Wenn dies der Fall ist, müssen Sie den Benutzer um Erlaubnis bitten, den Ereignisspeicher zu verwenden, bevor Sie Elemente speichern können.

Wenn der RequestAccessToEntityType: completion: selector in Ihrem Ereignisspeicherobjekt verfügbar ist, rufen Sie diese Methode auf und stellen einen Codeblock bereit, der ausgeführt wird, wenn der Benutzer die Berechtigung erteilt und Sie das Ereignis speichern Block.

zuerst den EventKit Rahmen zu Ihrem Projekt hinzufügen und vergessen Sie nicht, um den Import zu umfassen:

#import <EventKit/EventKit.h>

Hier ist ein Code-Schnipsel, die ich verwendet, dass für mich gearbeitet:

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]; 

Hier ist ein Blogbeitrag, den ich zu diesem Thema gemacht habe:

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

+0

danke :) für jetzt funktioniert es gut. Ich werde so schnell wie möglich zurückkommen und es auf dem iPhone testen. Ich habe auf Frage, was ist das sonst am Ende des Codes gut für vorne? Ich kenne die erste, wenn sonst, wenn und sonst. bin mir nicht sicher über das letzte. – WildWorld

+0

Ich habe den Code oben bearbeitet, um weiter zu erklären, was vor sich geht. Der else-Teil wird ausgeführt, wenn die App unter iOS 4 oder 5 ausgeführt wird. Wie bei diesen Versionen des Betriebssystems gibt es diesen Event-Kit-Selektor nicht und Sie möchten weiterhin, dass Ihre wichtigen Dinge in dieser Instanz ausgeführt werden. –

+0

Und natürlich, wenn es für Sie arbeitet, können Sie immer auf das Häkchen links neben der Antwort klicken, um es zu akzeptieren. ; D –

2

1) in Eventkit Rahmen und #import <EventKit/EventKit.h>

2)

-(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) Anruffunktion

[self syncWithCalendar]; 
Verwandte Themen