2

我让我的 EKEvent 工作正常,并在 iOS4 中完美地发布到 Calendar.app。现在突然它在 iOS5 或 6 中不起作用..?

我已经在网上搜索了几个小时,但似乎找不到解决方案?

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMddHHmm"];

NSLog(@"eventDateTime: %@", eventDateTime);

NSDate *date = [dateFormat dateFromString:@"201207202030"];

eventStore = [[EKEventStore alloc] init];
//defaultCalendar = [eventStore defaultCalendarForNewEvents];
venueEvent  = [EKEvent eventWithEventStore:eventStore];
//venueEvent.calendar = Calendar;
venueEvent.title     = event.name;
venueEvent.location = @"The Blvd Tavern";
venueEvent.startDate = date;
venueEvent.endDate   = [[NSDate alloc] initWithTimeInterval:14400  sinceDate:venueEvent.startDate];
EKAlarm *eventAlarm1 = [EKAlarm alarmWithRelativeOffset:-28800];
NSArray *alarmArray = [[NSArray alloc] initWithObjects:eventAlarm1, nil];
venueEvent.alarms = alarmArray;
[venueEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
//[venueEvent setCalendar:defaultCalendar];
NSError *err = [[NSError alloc] init];
[eventStore saveEvent:venueEvent span:EKSpanThisEvent error:&err]; 

NSLog(@"%@", err);

当我运行这段代码时,我一直在输入这个错误日志

错误域=EKErrorDomain 代码=1“未设置日历。” UserInfo=0x1cd2a350 {NSLocalizedDescription=没有设置日历。}

4

2 回答 2

4

您需要先询问用户使用日历的权限,然后才能对其进行修改。试试这个:

if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { // do stuff here } }

资料来源:https ://jeboyer.wordpress.com/2012/09/26/handling-access-to-calendars-in-ios-6-2/

于 2012-10-02T21:52:31.043 回答
2
float version = [[UIDevice currentDevice].systemVersion floatValue];
if(version >= 6.0){        
    EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    if(status == EKAuthorizationStatusNotDetermined){
        [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error){
            if(!granted){
                Alert!
            }
        }];
    }else if(status == EKAuthorizationStatusDenied){
        Alert!

    }
}
于 2013-01-23T08:02:05.233 回答