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

时间:2015-08-20 09:55:04

标签: ios calendar

如何检查日历中是否已存在该事件。我正在向日历添加一个事件。该事件被添加到特定日期,该日期来自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"];
    }];
}

1 个答案:

答案 0 :(得分:0)

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

要执行此操作,请将savedEventId保存在应用中的某个位置。这取决于该事件代表什么,您的应用保存了多少事件等等。

如果您的应用只添加了一个活动,则可以使用NSUserDefaultssavedEventId存储在特定密钥上(例如@"myEventId")。之后您可以检查是否已保存事件(通过NSUserDefaults核对),以及EventKit中是否仍存在该事件(如果您始终要重新创建该事件) ,但如果用户删除它,它应该在我看来保持删除)。

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