我似乎不明白为什么下面的代码不能工作。我得到了"Calendar Created“和"Calendar Existed”的NSlogs,我也没有问题地得到Calendar ID。我有一堆(大概10个)创建的日历只是在某个时刻“出现”,但我一直在尝试删除它们,它们没有显示出来。我真的很困惑为什么它不能工作。
-(void)saveEventWithDate:(NSDate *)startDate endDate:(NSDate *)endDate {
AppData *theData = [self theAppData];
EKEventStore *eventStore = [[EKEventStore alloc] init];
if([self checkIsDeviceVersionHigherThanRequiredVersion:@"6.0"]) {
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted){
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"Calendar"] == nil) // Create Calendar if Needed
{
EKSource *theSource = nil;
for (EKSource *source in eventStore.sources) {
if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) {
theSource = source;
NSLog(@"iCloud Store Source");
break;
} else {
for (EKSource *source in eventStore.sources) {
if (source.sourceType == EKSourceTypeLocal) {
theSource = source;
NSLog(@"iPhone Local Store Source");
break;
}
}
}
}
EKCalendar *cal;
cal = [EKCalendar calendarWithEventStore:eventStore];
cal.title = @"hello";
cal.source = theSource;
[eventStore saveCalendar:cal commit:YES error:nil];
NSLog(@"cal id = %@", cal.calendarIdentifier);
NSString *calendar_id = cal.calendarIdentifier;
[defaults setObject:calendar_id forKey:@"Calendar"];
event.calendar = cal;
} else {
event.calendar = [eventStore calendarWithIdentifier:[defaults objectForKey:@"Calendar"]];
NSLog(@"Calendar Existed");
}
event.title = [NSString stringWithFormat:@"%@ iPhone",[theData.repair_info objectForKey:@"name"]];
event.location = @"Location of";
event.notes = @"Notes";
event.startDate = startDate;
event.endDate = endDate;
event.allDay = NO;
EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:-1800]; // Half Hour Before
event.alarms = [NSArray arrayWithObject:alarm];
[eventStore saveEvent:event span:EKSpanThisEvent error:nil];
} else {
NSLog(@"Not Granted");
}
}];
} }发布于 2012-10-04 01:13:48
问题是,用户默认设置为创建(然后删除)的第一个日历,因此不会创建另一个日历。我必须清空我的NSUserDefaults,然后日历就被创建了。因此,如果用户删除了日历,我将不得不在设置下有一个“重置日历”按钮。
发布于 2013-04-17 16:19:43
我认为如果用户删除了一个日历,你不需要在设置下有一个“重置日历”按钮。只需将代码行从:
if ([defaults objectForKey:@"Calendar"] == nil) // Create Calendar if Needed至
if ([defaults objectForKey:@"Calendar"] == nil || ![eventStore calendarWithIdentifier:[defaults objectForKey:@"Calendar"]]) // Create Calendar if Needed您将创建一个新日历并向其中添加新事件
发布于 2012-10-30 21:43:42
问题出在代码的第一行。
//Wrong Way..
EKEventStore *eventStore = [[EKEventStore alloc] init];您已经创建了另一个EKEventStore实例,并且希望在现有实例中进行事务处理。
这里不是"alloc init“,而是从管理日历数据源的类中获取EKEventStore实例。这可能看起来像。
EKEventStore *eventStore = [dataSource getEventSore];此外,我建议您跟踪EKEvent的标识符,而不是跟踪日历的ID。
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
NSLog(@"eventIdentifier = %@",event.eventIdentifier);https://stackoverflow.com/questions/12712759
复制相似问题