在IOS中检查事件存储中的所有事件而不检查重复事件

我正在向IOS日历中添加事件数组,因为它必须单击一个button。因此,所有事件都会被重复添加。因此,我使用NSPredicate来获取所有事件并进行validation下面

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]; } } 

通过上面的代码,我只能得到生日事件,而不是任何其他已经存在的事件。 如何从日历中获取所有事件

请帮我,我哪里出了错。

我通过使用下面的代码解决了它

 -(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 ***** } }); }]; } } 

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

  -(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]; } } 

至于我分析你的代码,你应该在NSPredicate中设置日历nil。 喜欢这个

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

希望这可以帮助

    Interesting Posts