ios - iOS EKEventStore不保存日历

标签 ios xcode ekeventkit

我似乎无法弄清楚为什么以下代码无法正常工作。我得到了“已创建日历”和“已存在日历”的NSlogs,也得到了日历ID,没有问题。我曾经有一堆(如10个)创建的日历只是“出现”了,但是我删除了所有不间断的尝试,它们没有显示出来。我真的很困惑为什么它不起作用。

-(void)saveEventWithDate:(NSDate *)startDate endDate:(NSDate *)endDate {
    AppData *theData = [self theAppData];

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    if([self checkIsDeviceVersionHigherThanRequiredVersion:@"6.0"]) {
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            if (granted){

                EKEvent *event  = [EKEvent eventWithEventStore:eventStore];

                NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

                if ([defaults objectForKey:@"Calendar"] == nil) // Create Calendar if Needed
                {
                    EKSource *theSource = nil;

                    for (EKSource *source in eventStore.sources) {
                        if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) {
                            theSource = source;
                            NSLog(@"iCloud Store Source");
                            break;
                        } else {
                            for (EKSource *source in eventStore.sources) {
                                if (source.sourceType == EKSourceTypeLocal) {
                                    theSource = source;
                                    NSLog(@"iPhone Local Store Source");
                                    break;
                                }
                            }
                        }
                    }

                    EKCalendar *cal;
                    cal = [EKCalendar calendarWithEventStore:eventStore];
                    cal.title = @"hello";
                    cal.source = theSource;
                    [eventStore saveCalendar:cal commit:YES error:nil];
                    NSLog(@"cal id = %@", cal.calendarIdentifier);
                    NSString *calendar_id = cal.calendarIdentifier;
                    [defaults setObject:calendar_id forKey:@"Calendar"];
                    event.calendar  = cal;

                } else {
                    event.calendar  = [eventStore calendarWithIdentifier:[defaults objectForKey:@"Calendar"]];
                    NSLog(@"Calendar Existed");
                }

                event.title     = [NSString stringWithFormat:@"%@ iPhone",[theData.repair_info objectForKey:@"name"]];
                event.location  = @"Location of";
                event.notes     = @"Notes";
                event.startDate = startDate;
                event.endDate   = endDate;
                event.allDay    = NO;
                EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:-1800]; // Half Hour Before
                event.alarms = [NSArray arrayWithObject:alarm];

                [eventStore saveEvent:event span:EKSpanThisEvent error:nil];

            } else {
                NSLog(@"Not Granted");
            }

        }];
    } }

最佳答案

我认为,如果用户删除了日历,则无需在设置下有“重置日历”按钮。只需更改以下代码行:

if ([defaults objectForKey:@"Calendar"] == nil) // Create Calendar if Needed


if ([defaults objectForKey:@"Calendar"] == nil || ![eventStore calendarWithIdentifier:[defaults objectForKey:@"Calendar"]]) // Create Calendar if Needed

您将创建一个新日历并向其中添加新事件

关于ios - iOS EKEventStore不保存日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712759/

相关文章:

ios - 如何在编译时检查当前项目中是否存在 Swift 模块?

ios - 如何在 ios 中使用地址显示谷歌地图?

iphone - EKEvents Store 对象初始化

iOS EKEvent Store 循环重新创建 iCloud 日历,不会保存在本地。

ios - 如何以编程方式添加具有动态宽度的约束

ios - Sprite-kit 优化了批处理和纹理共享

ios - 为什么 iPhone X 会忽略 UICollectionView 的 UIEdgeInsets?

iphone - 如何自定义 EKEventEditViewController?

ios - 选择不起作用嵌入在容器 View 中的 Collection View

ios - H27-客户请求中断