如何检查日历事件是否已经存在

How to check a calendar event already exists or not

如何检查日历中是否已经存在该事件。我正在向日历中添加一个事件。该事件被正确添加到来自 API 的特定日期,但它被添加了很多次。我只需要为日期添加一次事件。

如何克服这些问题?

case 6: {
    [APP_SHARE startIndicator];
    EKEventStore *store = [EKEventStore new];

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
    {
        if (!granted) { return; }

        EKEvent *event = [EKEvent eventWithEventStore:store];

        event.title = [NSString stringWithFormat:@"Event Name=%@ Date & Time=%@",[arr_response valueForKey:@"post_title"],[arr_response valueForKey:@"time"]];

        NSString *myDateString = [arr_response valueForKey:@"time"] ;
        // Convert the string to NSDate

        NSArray* str_latlon_array = [myDateString componentsSeparatedByString: @","];
        NSLog(@"%@",[str_latlon_array objectAtIndex: 0]);

        NSString* str=[str_latlon_array objectAtIndex: 0];

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"dd/MM/yyyy";

        NSDate *today = [dateFormatter dateFromString:str];
        dateFormatter.dateFormat = @"EEEE";
       // NSString *dayName = [dateFormatter stringFromDate:today];


        event.startDate = [today dateByAddingTimeInterval:60*60]; //today
       // NSLog(@"%@",today);
        event.endDate = [today dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        event.calendar = [store defaultCalendarForNewEvents];
        NSError *err = nil;
       ; [store saveEvent:event span :EKSpanThisEvent commit:YES error:&err];

        savedEventId = event.eventIdentifier;

         [APP_SHARE stopIndicator];
         [AppDelegate defaultAlert:@"Information" message:@"Data Saved in Calender"];
    }];
}

基本上..不要多次添加。您发布的代码部分被多次调用。

为此,请将 savedEventId 保存在您应用的某个位置。这取决于该事件代表什么,您的应用程序保存了多少事件等等。

如果您的应用只添加一个事件,您可以使用 NSUserDefaultssavedEventId 存储在特定键上(例如 @"myEventId")。之后你可以检查你是否已经保存了事件(通过检查 NSUserDefaults),以及事件是否仍然存在于 EventKit 中(如果你总是想重新创建它,但是如果用户删除了它,我认为它应该保持删除状态)。

或者,如果您的应用向日历添加了多个事件,您显然必须将应用添加的所有事件的 savedEventId 存储在唯一键上。您可以在数据库中执行此操作(例如使用 CoreData)。