无法在日历中添加事件

问题描述:

我想在“someName”日历中添加事件。如果具有给定名称的日历不存在,那么我将以编程方式创建一个日历。我的问题是,当(EKSource类型的)localSource结果为null时,事件不会被添加。我添加了3个检查来确保我获得了localSource的值,但即使在某些情况下,localSource也是零。所以在我的手机上,事件得到了增加,但在我朋友的手机上却没有。无法在日历中添加事件

我跟着各个岗位了,我明白EKSource可用6种类型: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:我有权添加日历事件。

+0

您是否有权限操作朋友的日历?你的朋友是否允许你的应用程序做到这一点? – NSDmitry

+0

是的,我拥有所有需要的权限。 –

+0

什么是你的和朋友的iPhone的iOS版本? –

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

我的代码将在2给出案件日历:

  1. 用户已经登录到iCloud中,并已获准到icloud写日历。在这种情况下,本地源不是零,并且日历在“iCloud”中创建,名称为“someName”。
  2. 用户还没有登录icloud。现在,日历是在'我的iphone'本地源中使用名称'someName'创建的。