iOS向日历添加事件的速度很慢?

Bha*_*rat 0 objective-c ios ekevent

我已使用此代码将事件添加到iphone日历中

-(void)setEvent:(NSString *)title withStartDate:(NSDate *)startDate withEndDate:(NSDate *)endDate completion:(void (^)(void))completionBlock
{

    EKEventStore* store = [[EKEventStore alloc] init];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted)
        {
            return;
        }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = title;
        event.startDate = startDate;
        event.endDate = endDate;
        [event setCalendar:[store defaultCalendarForNewEvents]];
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
       // NSString *savedEventId = event.eventIdentifier;
        NSString* alertTitle;
        NSString* msg;
        if (err) {

            alertTitle = @"Calendar was not set";
            msg = @"Please set default calendar in settings.";
        }
        else
        {
            alertTitle = @"Event added";
            msg = @"Event had been added in your calendar.";
        }
        UIAlertView* alert = [[UIAlertView alloc] initWithTitle:alertTitle message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        completionBlock();

    }];
}
Run Code Online (Sandbox Code Playgroud)

但添加事件是非常缓慢的.我要等待大约10-12秒才能完成这个方法.这是正常的还是我做错了什么?我已经搜索了相同的但仍然没有运气.任何建议将不胜感激.

Bha*_*rat 8

经过两天的研究,我发现解决方案 - 我把事件保存代码放在dispatch_async这里是我更新的事件添加方法 -

-(void)setEvent:(NSString *)title withStartDate:(NSDate *)startDate withEndDate:(NSDate *)endDate withResecheduling:(BOOL)rescheduling completion:(void (^)(void))completionBlock
{

    [[BusyIndicator sharedInstance] startIndicator];
    EKEventStore* store = [[EKEventStore alloc] init];

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted)
        {
            return;
        }
                dispatch_async(dispatch_get_main_queue(), ^{
                    EKEvent *event = [EKEvent eventWithEventStore:store];
                    event.title = title;
                    event.startDate = startDate;
                    event.endDate = endDate;
                    [event setCalendar:[store defaultCalendarForNewEvents]];
                    NSError *err = nil;
                    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
                    // NSString *savedEventId = event.eventIdentifier;
                    if (!rescheduling) {

                        NSString* alertTitle;
                        NSString* msg;
                        if (err) {

                            alertTitle = @"Calendar was not set";
                            msg = @"Please set default calendar in settings.";
                        }
                        else
                        {
                            alertTitle = @"Event added";
                            msg = @"Event has been added in your calendar.";
                        }
                        UIAlertView* alert = [[UIAlertView alloc] initWithTitle:alertTitle message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                        [alert show];
                    }

                    [[BusyIndicator sharedInstance] stopIndicator];
                    completionBlock();
        });


    }];
}
Run Code Online (Sandbox Code Playgroud)

  • 我看到同样的事情 - 在尝试为用户选择日历时使用我自己的UI或EKCalendarChooser呈现UI时,块中有10-30秒的延迟.无论如何,异步调度也为我修复了这个问题. (2认同)