2012-10-26 92 views
14

Hy将事件添加到xcode中的日历iOS

我有用于将事件添加到日历但不添加的代码。

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

从XML我得到这种格式的日期和时间:

datestring:2012年10月28日

starttimestring:15:00

+0

确保你'startDate'和'endDate'是在保存之前有效日期 – Maulik

+0

当我NSlog dateandtime和dateandtimeend我有这种格式28.10.2012 15:00相同的日期格式 – WildWorld

+0

打印'NSError' – Maulik

回答

24

你在iOS 6模拟器或在iOS 6设备上?如果是这样,您需要先向用户请求使用事件存储的权限,然后才能将项目保存到该存储。

基本上,如果requestAccessToEntityType:completion:选择器在您的事件存储对象上可用,那么您调用该方法并提供在用户授予权限时执行的代码块,然后您将执行该事件保存块。

首先添加EventKit框架到您的项目,不要忘了包括进口:

#import <EventKit/EventKit.h>

下面的代码片段,我使用的工作对我来说:

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

这是我在这方面做的博客文章:

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

+0

谢谢:)现在它工作正常。我会尽快回复你,在iPhone上测试它。我有问题,代码的最后部分还有什么好的?我知道第一个if if else if和else。不知道最后一次。 – WildWorld

+0

我编辑了上面的代码来进一步解释发生了什么。如果应用程序在iOS 4或5上运行,则该部分将运行,就像在这些OS版本上一样,该事件工具包选择器将不存在,并且您仍然希望在该实例中完成重要的事情。 –

+0

当然,如果它为你工作,你总是可以点击答案左边的复选标记来接受它。 ; D –

2

1)添加Eventkit框架和#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)通话功能

[self syncWithCalendar];