Ios 使用后台线程在日历上创建多个事件

Ios 使用后台线程在日历上创建多个事件,ios,objective-c,calendar,eventkit,Ios,Objective C,Calendar,Eventkit,我必须根据服务器的响应(事件)更新日历。我制作了一个数组来保存所有事件对象,并对其进行迭代以将事件保存在日历上。它的工作,但问题是它只创建一个随机事件,而不是所有 我必须显示所有事件(现在最重要) 如何使用后台队列更新日历 我必须每5分钟更新一次日历,所以方法必须在后台每5分钟执行一次 在主页viewDidLoad方法中,当我的用户登录到应用程序时,调用服务器创建事件。日历是否需要时间来创建事件,如果用户登录并立即退出应用程序会发生什么。日历是否会更新?我想在日历上的所有事件创建完成之前,主页不

我必须根据服务器的响应(事件)更新日历。我制作了一个数组来保存所有事件对象,并对其进行迭代以将事件保存在日历上。它的工作,但问题是它只创建一个随机事件,而不是所有

  • 我必须显示所有事件
    (现在最重要)
  • 如何使用后台队列更新日历
  • 我必须每5分钟更新一次日历,所以方法必须在后台每5分钟执行一次
  • 在主页
    viewDidLoad
    方法中,当我的用户登录到应用程序时,调用服务器创建事件。日历是否需要时间来创建事件,如果用户登录并立即退出应用程序会发生什么。日历是否会更新?我想在日历上的所有事件创建完成之前,主页不会被加载
  • 这是代码

    - (void)calUpdateWebService
    {
        NSString *urlString = @"http://www.xxxx.com";
    
        NSURL *url = [NSURL URLWithString:urlString];
    
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
    
        NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
    
        NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject];
    
        NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            if (!error)
            {
                NSDictionary *responseJson = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    
                NSMutableArray *eventArray = responseJson[@"result"];
    
                eventData = [NSMutableArray new];
                for(NSDictionary *eventDict in eventArray)
                {
                    NSDictionary *eventDic =@{@"startDate":[eventDict valueForKey:@"start_date"],@"endDate":[eventDict valueForKey:@"end_date"],@"eventSlot":[eventDict valueForKey:@"slot"],@"eventTitle":[eventDict valueForKey:@"package_title"]};
    
                    [eventData addObject:eventDic] ;
                }
                /** call method to create events**/
                [self addBooking];
            }
    
        }];
        [dataTask resume];
    }
    
    /** method to create events **/
    -(void)addBooking
    {
        EKEventStore *eventStore = [[EKEventStore alloc]init];
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
            if (granted)
            {
                addEventGranted =1;
    
                EKEvent *event =[EKEvent eventWithEventStore:eventStore];
                for (int i = 0; i<[eventData count]; ++i)
                {
                    [event setTitle:[[eventData objectAtIndex:i] valueForKey:@"eventTitle"]];
                    NSString *startDate = [[eventData objectAtIndex:i] valueForKey:@"startDate"];
                    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
                    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
                    NSDate *eventStrtdate = [dateFormatter dateFromString:startDate];
                    [event setStartDate:eventStrtdate];
                    [event setEndDate:[[NSDate alloc]initWithTimeInterval:1200 sinceDate:event.startDate]];
                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                    NSError *err;
                    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
                }
            }
        }];
    }@end
    
    -(void)calUpdateWebService
    {
    NSString*urlString=@”http://www.xxxx.com";
    NSURL*url=[NSURL URLWithString:urlString];
    NSMutableURLRequest*urlRequest=[NSMutableUrlRequestWithURL:url];
    NSURLSessionConfiguration*defaultConfigObject=[NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession*defaultSession=[NSURLSession sessionWithConfiguration:defaultConfigObject];
    NSURLSessionDataTask*dataTask=[defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData*数据,NSURLRResponse*响应,NSError*错误){
    如果(!错误)
    {
    NSDictionary*responseJson=[NSJSONSerialization JSONObjectWithData:数据选项:kNilOptions错误:nil];
    NSMutableArray*eventArray=responseJson[@“结果”];
    eventData=[NSMutableArray new];
    for(事件数组中的NSDictionary*eventDict)
    {
    NSDictionary*eventDic=@{“startDate”:[eventDict valueForKey:@“开始日期”],@“结束日期”:[eventDict valueForKey:@“结束日期”],@“eventSlot”:[eventDict valueForKey:@“slot”],@“eventTitle”:[eventDict valueForKey:@“package”];
    [eventData addObject:eventDic];
    }
    /**调用方法来创建事件**/
    [自助预订];
    }
    }];
    [数据任务恢复];
    }
    /**方法来创建事件**/
    -(无效)添加预订
    {
    EKEventStore*eventStore=[[EKEventStore alloc]init];
    [eventStore requestAccessToEntityType:eEntityTypeEvent completion:^(已授予布尔,N错误*错误){
    如果(授予)
    {
    addEventGranted=1;
    EKEvent*event=[EKEvent eventWithEventStore:eventStore];
    
    对于(int i=0;i而言,关键问题是在循环之前实例化一次事件,因此会重复更新同一事件,而希望在循环中实例化一个新事件:

    // don't instantiate this here
    //
    // EKEvent *event =[EKEvent eventWithEventStore:eventStore];
    
    for (int i = 0; i<[eventData count]; ++i) {
        // but rather do it here
    
        EKEvent *event = [EKEvent eventWithEventStore:eventStore];
    
        // now carry on updating the event and saving it
    }
    
    //不要在这里实例化它
    //
    //EKEvent*event=[EKEvent eventWithEventStore:eventStore];
    对于(int i=0;i