无法在日历中添加事件

我想添加“someName”日历中的事件。 如果具有给定名称的日历不存在,那么我将以编程方式创build一个日历。 我的问题是,事件不会被添加localSource(EKSourcetypes)结果是null。 我添加了3个检查,以确保获得localSource的值,但即使在某些情况下,localSource也是零。 所以在我的电话事件得到补充,但在我的朋友的电话,他们不。

我跟着各种职位,我明白,EKSource可以是6种types: https : //developer.apple.com/reference/eventkit/eksourcetype

我不明白的是在什么情况下localSource将是零? 这在正常语言中意味着什么? 我能从代码中做些什么来使它不是零,或者什么东西必须由用户在设备上完成?

- (void)setCalendar { NSArray *calendars = [self.eventStore calendarsForEntityType:nil]; NSString *calendarTitle = someName; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title matches %@", calendarTitle]; NSArray *filtered = [calendars filteredArrayUsingPredicate:predicate]; if ([filtered count]) { self.calendar = [filtered firstObject]; } else { self.calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.eventStore]; self.calendar.title = calendarTitle; EKSource *localSource; for (EKSource *source in self.eventStore.sources) { //if iCloud account is setup then add the event in that calendar if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) { localSource = source; break; } } if (localSource == nil) { for (EKSource *source in self.eventStore.sources) { //if iCloud is not setup then look for local source if (source.sourceType == EKSourceTypeLocal) { localSource = source; break; } } } if (!localSource) { localSource = [self.eventStore defaultCalendarForNewEvents].source; } self.calendar.source = localSource; NSError *calendarErr = nil; BOOL calendarSuccess = [self.eventStore saveCalendar:self.calendar commit:YES error:&calendarErr]; if (!calendarSuccess) { NSLog(@"Error while updating calendar %@", calendarErr); } } 

}

PS:我有权限添加日历事件。

本地源代码描述了用户日历中的'我的iphone','icloud','gmail'等字段。 在我的代码中,当用户设置icloud账户但没有授予icloud账户写入日历时,本地来源为空。 因此,即使应用程序有权写入日历,但本地源为零,因此,向日历添加事件失败。

在给定的两种情况下,我的代码添加到日历中:

  1. 用户已经login到icloud,并已授予icloud写入日历。 在这种情况下,本地源不是零,在“iCloud”中创build名称为“someName”的日历。
  2. 用户尚未loginicloud。 现在,在'我的iphone'本地源代码中创build名称为'someName'的日历。