我想在「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:我有權添加日曆事件。
您是否有權限操作朋友的日曆?你的朋友是否允許你的應用程序做到這一點? – NSDmitry
是的,我擁有所有需要的權限。 –
什麼是你的和朋友的iPhone的iOS版本? –