objective-c – 目标C-iCal未在iOS 9中为其创建自定义日历和新事
发布时间:2020-12-16 07:14:04 所属栏目:百科 来源:网络整理
导读:这在iOS 8中完美运行. 但是在iOS 9中创建问题.这里是代码: self.eventManager.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError *error) { if (granted) { // Create a new calendar. EKCalendar *calendar = [E
这在iOS 8中完美运行.
但是在iOS 9中创建问题.这里是代码: self.eventManager.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError *error) { if (granted) { // Create a new calendar. EKCalendar *calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.eventManager.eventStore]; // Set the calendar title. calendar.title = @"<APP name>"; calendar.CGColor=APP_Blue_COLOR.CGColor; // Find the proper source type value. for (int i=0; i<self.eventManager.eventStore.sources.count; i++) { EKSource *source = (EKSource *)[self.eventManager.eventStore.sources objectAtIndex:i]; EKSourceType currentSourceType = source.sourceType; if (currentSourceType == EKSourceTypeLocal) { calendar.source = source; break; } } // Save and commit the calendar. NSError *error; [self.eventManager.eventStore saveCalendar:calendar commit:YES error:&error]; // If no error occurs then turn the editing mode off,store the new calendar identifier and reload the calendars. if (error == nil) { // Turn off the edit mode. // Store the calendar identifier. [self.eventManager saveCustomCalendarIdentifier:calendar.calendarIdentifier];self.eventManager.selectedCalendarIdentifier=calendar.calendarIdentifier;//chirag } else{ // Display the error description to the debugger. NSLog(@"CREATE_CALENDER %@",[error localizedDescription]); } } else { UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"Please give permission to access your iPhone calender." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show]; } }]; 它给了我成功的消息,但没有在iPhone日历中创建我的应用程序日历. 我虽然因为没有设置事件而没有显示它.所以我也尝试设置新事件. 但它给了我以下代码&创建新事件时出错. // Create a new event object. EKEvent *event = [EKEvent eventWithEventStore:self.eventManager.eventStore]; // Set the event title. event.title = title; // Set its calendar. event.calendar = [self.eventManager.eventStore calendarWithIdentifier:self.eventManager.selectedCalendarIdentifier]; // Set the start and end dates to the event. event.startDate = startDate; event.endDate = endDate; // Save and commit the event. NSError *error; if ([self.eventManager.eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error]) { // Call the delegate method to notify the caller class (the ViewController class) that the event was saved. return true; } else{ // An error occurred,so log the error description. NSLog(@"%@",[error localizedDescription]); return false; } 它在内部给出以下错误,但它会在NSError对象中返回: Error getting shared calendar invitations for entity types 3 from daemon: Error Domain=EKCADErrorDomain Code=1014 "(null)" 解决方法
问题是,当iCloud日历打开时,它会从日历应用程序中隐藏本地创建的日历.要绕过此问题,解决方案是向iCloud源添加新日历:
for (EKSource *source in self.eventStore.sources) { if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) //This is a patch. { localSource = source; break; } } if (localSource == nil) { for (EKSource *source in self.eventStore.sources) { if (source.sourceType == EKSourceTypeLocal) { localSource = source; break; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |