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