如何检查日历事件是否已经存在
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
保存在您应用的某个位置。这取决于该事件代表什么,您的应用程序保存了多少事件等等。
如果您的应用只添加一个事件,您可以使用 NSUserDefaults
将 savedEventId
存储在特定键上(例如 @"myEventId"
)。之后你可以检查你是否已经保存了事件(通过检查 NSUserDefaults
),以及事件是否仍然存在于 EventKit
中(如果你总是想重新创建它,但是如果用户删除了它,我认为它应该保持删除状态)。
或者,如果您的应用向日历添加了多个事件,您显然必须将应用添加的所有事件的 savedEventId
存储在唯一键上。您可以在数据库中执行此操作(例如使用 CoreData
)。
如何检查日历中是否已经存在该事件。我正在向日历中添加一个事件。该事件被正确添加到来自 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
保存在您应用的某个位置。这取决于该事件代表什么,您的应用程序保存了多少事件等等。
如果您的应用只添加一个事件,您可以使用 NSUserDefaults
将 savedEventId
存储在特定键上(例如 @"myEventId"
)。之后你可以检查你是否已经保存了事件(通过检查 NSUserDefaults
),以及事件是否仍然存在于 EventKit
中(如果你总是想重新创建它,但是如果用户删除了它,我认为它应该保持删除状态)。
或者,如果您的应用向日历添加了多个事件,您显然必须将应用添加的所有事件的 savedEventId
存储在唯一键上。您可以在数据库中执行此操作(例如使用 CoreData
)。