2016-12-28 125 views
4

我想在「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版本? –

回答

4

本地來源描述了用戶日曆中的'我的iphone','icloud','gmail'等字段。在我的代碼中,當用戶設置icloud帳戶但沒有授予icloud帳戶寫入日曆時,本地源爲空。因此,即使應用程序有權寫入日曆但本地源爲零,因此,向日歷添加事件失敗。

我的代碼將在2給出案件日曆:

  1. 用戶已經登錄到iCloud中,並已獲准到icloud寫日曆。在這種情況下,本地源不是零,並且日曆在「iCloud」中創建,名稱爲「someName」。
  2. 用戶還沒有登錄icloud。現在,日曆是在'我的iphone'本地源中使用名稱'someName'創建的。