检查重复事件,而不会在IOS中的事件存储中获取所有事件 [英] Checking for duplicate events without getting all events in the Event Store in IOS

查看:120
本文介绍了检查重复事件,而不会在IOS中的事件存储中获取所有事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在向IOS日历添加事件数组。因为它必须叩击一个按钮。通过这样做,所有的事件都会一再添加。因此,为了过来,我使用NSPredicate获取所有的事件和做如下验证

  NSDate * edate = [formatter dateFromString:startDateString]; 
NSDate * fdate = [formatter dateFromString:endDateString];


NSLog(@开始日期为%@,edate);
NSLog(@结束日期为%@,fdate);

event1.startDate = edate;
event1.endDate = fdate;


NSArray * caleandarsArray = [[NSArray alloc] init];
caleandarsArray = [eventStore日历];

NSPredicate * predicateForEvents = [eventStore predicateForEventsWithStartDate:edate endDate:fdate calendars:caleandarsArray]; // nil将搜索所有日历


NSArray * eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents];

NSLog(@保留日期的事件为%@,eventsOnDate);


BOOL eventExists = NO;

for(EKEvent * eventToCheck in eventsOnDate)
{

NSLog(@eventToCheck title is%@,eventToCheck.title);
NSLog(@myTripsArray title is%@,[myTripsArray objectAtIndex:i]);

if([eventToCheck.title isEqualToString:[myTripsArray objectAtIndex:i]])
{
eventExists = YES;
NSLog(@事件已存在);

}
}



if(eventExists == NO)
{

[event1 setTimeZone:[NSTimeZone systemTimeZone]];
[event1 setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError * err;
if(err)
{
NSLog(@Error occurredured);

}
else
{
NSLog(@不发生错误);

}
[eventStore saveEvent:event1 span:EKSpanThisEvent error:& err];
}

}

通过上面的代码,我得到只有生日活动没有任何其他存在的事件。如何从日历中获取所有活动。



请帮助我出错。

解决方案

我使用以下代码解决了

   - (IBAction)calenderButtonAction:(id)sender 
{

eventStore = [[EKEventStore alloc] init];
if([eventStore respondToSelector:@selector(requestAccessToEntityType:completion :)]
{
//选择器可用,所以我们必须在iOS 6或更新的
[ eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL grant,NSError * error){
dispatch_async(dispatch_get_main_queue(),^ {
if(error)
{
//显示错误消息这里
NSLog(@error);


}
else if(!approved)
{
//显示访问被拒绝
NSLog(@not approved);
}
else
{
//获取
NSLog(@授予) ;
[self addedDetailsToCalender];

// *****做这些重要的东西*****
}
});
}];
}
}

通过忽略重复事件将事件添加到日历

   - (void)addingDetailsToCalender 
{

EKEvent * event1 = [EKEvent eventWithEventStore:eventStore];
event1.location = @海得拉巴;
event1.title = @样本测试Satya;

event1.startDate = [NSDate date];
// event1.endDate = [NSDate dateWithTimeIntervalSinceNow:86400] ;;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDateComponents * comps = [NSDateComponents new];
comps.day = 7;
NSDate * sevenDays = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];

NSLog(@七天日期为%@,七天);
event1.endDate =七天;

NSPredicate * predicateForEvents = [eventStore predicateForEventsWithStartDate:[NSDate date] endDate:[NSDate dateWithTimeIntervalSinceNow:10 * 365 * 86400]日历:nil];

NSArray * eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents];

NSLog(@保留日期的事件为%@,eventsOnDate);


BOOL eventExists = NO;

for(EKEvent * eventToCheck in eventsOnDate)
{

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@yyyy-MM-dd];
NSString * startDateStr = [NSString stringWithFormat:@%@,
[dateFormatter stringFromDate:eventToCheck.startDate]];
NSString * event1startDate = [NSString stringWithFormat:@%@,[dateFormatter stringFromDate:event1.startDate]];
NSLog(@mystart date is%@,startDateStr);
NSLog(@我的活动开始日期是%@,event1startDate);


if([eventToCheck.title isEqualToString:event1.title]&&&&&start;
NSLog(@事件已存在);

}
}


if(eventExists == NO)
{

[event1 setTimeZone: [NSTimeZone systemTimeZone]];
[event1 setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError * err;
if(err)
{
NSLog(@Error occurredured);

}
else
{

NSLog(@不发生错误);

}
[eventStore saveEvent:event1 span:EKSpanThisEvent error:& err];

}

}


I am adding array of events to IOS calendar.As it has to happing on clicking a button.By doing this all the events are getting added again and again.So to over come that I used NSPredicate to get all the events and doing validation like below

NSDate *edate=[formatter dateFromString:startDateString];
NSDate *fdate=[formatter dateFromString:endDateString];


NSLog(@"Start Date is %@",edate);
NSLog(@"End Date is %@",fdate);

event1.startDate =edate;
event1.endDate=fdate;


NSArray *caleandarsArray = [[NSArray alloc] init];
caleandarsArray = [eventStore calendars] ;

NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:edate endDate:fdate calendars:caleandarsArray]; // nil will search through all calendars


 NSArray *eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents];

 NSLog(@"Events on holday date is %@",eventsOnDate);


 BOOL eventExists = NO;

 for (EKEvent *eventToCheck in eventsOnDate)
 {

   NSLog(@" eventToCheck title is %@",eventToCheck.title);
    NSLog(@" myTripsArray title is %@",[myTripsArray objectAtIndex:i]);

     if ([eventToCheck.title isEqualToString:[myTripsArray objectAtIndex:i]])
     {
          eventExists = YES;
         NSLog(@"Event already existed");

     }
   }



   if (eventExists == NO)
      {

         [event1 setTimeZone:[NSTimeZone systemTimeZone]];
         [event1 setCalendar:[eventStore defaultCalendarForNewEvents]];
         NSError *err;
         if(err)
         {
            NSLog(@"Error occured");

         }
          else
         {
            NSLog(@"Error not occured");

         }
                 [eventStore saveEvent:event1 span:EKSpanThisEvent error:&err];
       }

 }

By the above code I am getting only birthday events not any other events which are existed. How to get all events from the calendar.

Please help me where I had gone wrong.

解决方案

I solved it by using the below code

-(IBAction)calenderButtonAction:(id)sender
{

eventStore = [[EKEventStore alloc] init];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
    // the selector is available, so we must be on iOS 6 or newer
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (error)
            {
                // display error message here
                NSLog(@"error");


            }
            else if (!granted)
            {
                // display access denied error message here
                NSLog(@"not granted");
            }
            else
            {
                // access granted
                NSLog(@" granted");
                [self addingDetailsToCalender];

                // ***** do the important stuff here *****
            }
        });
    }];
}
}

Adding events to calendar by ignoring duplicates

 -(void)addingDetailsToCalender
 {

EKEvent *event1  = [EKEvent eventWithEventStore:eventStore];
event1.location=@"Hyderabad";
event1.title=@"Sample test Satya ";

event1.startDate =[NSDate date];
// event1.endDate=[NSDate dateWithTimeIntervalSinceNow:86400];;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [NSDateComponents new];
comps.day = 7;
NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];

NSLog(@"Seven days date is %@",sevenDays);
event1.endDate=sevenDays;

  NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:[NSDate date] endDate:[NSDate dateWithTimeIntervalSinceNow:10*365*86400] calendars:nil];

NSArray *eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents];

NSLog(@"Events on holday date is %@",eventsOnDate);


 BOOL eventExists = NO;

for (EKEvent *eventToCheck in eventsOnDate)
{

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *startDateStr=[NSString stringWithFormat:@"%@",
                            [dateFormatter stringFromDate:eventToCheck.startDate]];
    NSString *event1startDate= [NSString stringWithFormat:@"%@", [dateFormatter stringFromDate:event1.startDate]];
    NSLog(@"mystart date is %@",startDateStr);
    NSLog(@"my event start date is %@",event1startDate);


      if ([eventToCheck.title isEqualToString:event1.title] && [startDateStr isEqualToString:event1startDate])
     {
     eventExists = YES;
     NSLog(@"Event already existed");

    }
}


 if (eventExists == NO)
{

   [event1 setTimeZone:[NSTimeZone systemTimeZone]];
     [event1 setCalendar:[eventStore defaultCalendarForNewEvents]];
   NSError *err;
 if(err)
{
  NSLog(@"Error occured");

}
  else
 {

  NSLog(@"Error not occured");

}
 [eventStore saveEvent:event1 span:EKSpanThisEvent error:&err];

}

 }

这篇关于检查重复事件,而不会在IOS中的事件存储中获取所有事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆