检查重复事件,而不获取IOS中事件存储中的所有事件
我正在将事件数组添加到IOS日历中。因为它必须在单击按钮时发生。通过这样做,所有事件都会被一次又一次地添加。因此,我使用NSPredicate获取所有事件并进行如下验证检查重复事件,而不获取IOS中事件存储中的所有事件,ios,iphone,objective-c,events,eventkit,Ios,Iphone,Objective C,Events,Eventkit,我正在将事件数组添加到IOS日历中。因为它必须在单击按钮时发生。通过这样做,所有事件都会被一次又一次地添加。因此,我使用NSPredicate获取所有事件并进行如下验证 NSDate *edate=[formatter dateFromString:startDateString]; NSDate *fdate=[formatter dateFromString:endDateString]; NSLog(@"Start Date is %@",edate); NSLog(@"End Dat
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];
}
}
通过上面的代码,我得到的只是生日事件,而不是任何其他已经存在的事件。如何从日历中获取所有事件
请告诉我哪里出错了。我分析了您的代码,您应该在NSPredicate中将日历设置为零。像这样
NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:edate endDate:fdate calendars:nil]; // nil will search through all calendars.
希望这有帮助我用下面的代码解决了它
-(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];
}
}
“EKEvent{\n\t EKEvent\n{\t title=\t\t特拉克斯曼·拉贾纳\U2019s生日;\n\t位置=\t(null);\n\t日历=\tkCalendar{title=生日;type=生日;allowsModify=NO;color=\t\t报警=\t\t(null);\n\t URL=\t\t\t\t\t\t\t\t lastModified=(null);\n\t时区=\t(null)\n\t时区=\t(null);\n\t位置=\t(null);\n\t开始日期=\t2013-10-20 18:30:00;\n\t结束日期=\t\t2013-10-21 18:29:59;\n\t全天=\t\t1;\n\t浮动=\t1;\n\t复发=\t复发频率=年;间隔=1;\n\t与会者=\t(空)\n};