iOS アプリケーションで Event Kit を使用しており、Event Kit を使用してイベントを作成しています。作成はできますが、削除もできるようにしたいです。しかし、私にはそれができません。EKEventStore がイベントを削除する方法があることは知っていますが、イベント オブジェクトを作成できません。イベント ID を文字列として持っていますが、それを使用してイベント オブジェクトを作成できません。誰かが私にそれをするように案内してもらえますか?
よろしくパンカイ
iOS アプリケーションで Event Kit を使用しており、Event Kit を使用してイベントを作成しています。作成はできますが、削除もできるようにしたいです。しかし、私にはそれができません。EKEventStore がイベントを削除する方法があることは知っていますが、イベント オブジェクトを作成できません。イベント ID を文字列として持っていますが、それを使用してイベント オブジェクトを作成できません。誰かが私にそれをするように案内してもらえますか?
よろしくパンカイ
event.eventIdentifier が値を変更するため、これを参照してください。そのため、イベントに設定した event.title を追跡し、イベントにアクセスして削除する必要があります
NSDate *startDate = <EVENT_START_DATE>;
NSDate *endDate = <EVENT_END_DATE>;
NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:[NSArray arrayWithObject:[eventStore defaultCalendarForNewEvents]]];
//set predicate to search for an event of the calendar(you can set the startdate, enddate and check in the calendars other than the default Calendar)
NSArray *events_Array = [eventStore eventsMatchingPredicate: predicateForEvents];
//get array of events from the eventStore
for (EKEvent *eventToCheck in events_Array)
{
if( [eventToCheck.title isEqualToString: @"yourEventTitle"] )
{
NSError *err;
BOOL success = [eventStore removeEvent:eventToCheck span:EKSpanThisEvent error:&err];
NSLog( @"event deleted success if value = 1 : %d", success );
break;
}
}
イベントを作成するときはいつでも、次のように ID を保存します。
NSString* str = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier];
ID を渡してイベントを削除します。コードは次のとおりです。
EKEventStore* store = [[EKEventStore alloc] init];
EKEvent* event2 = [store eventWithIdentifier:str];
if (event2 != nil) {
NSError* error = nil;
[store removeEvent:event2 span:EKSpanThisEvent error:&error];
}
iOS で eventWithIdentifier を使用して EKEvent を見てください。
また、次のコードが機能することもわかっています
// eventWithIdentifier returns nil for the external identifier
//EKEvent *eventToRemove = [eventStore eventWithIdentifier:self.expiryCalendarExternalIdentifier];
// So I'm using this method, which seems to work.
- (EKEvent *) getEventForIdentifer: (NSString *) eventIdentifier {
EKEventStore *eventStore = [Settings getEventStore];
NSArray *items = [eventStore calendarItemsWithExternalIdentifier:eventIdentifier];
if ([items count] == 1) {
return items[0];
} else {
[LogFile write:@"getEventForIdentifer: more than one occurrence of event, or no event!"];
return nil;
}
}
このコードの動作例 (未テスト):
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *newCalendarEvent = [EKEvent eventWithEventStore:eventStore];
// Just because we created an EKEvent, the calendarItemExternalIdentifier property of that event has been set.
// I store calendarItemExternalIdentifier (an NSString) in a Core Data
// object, and later fetch it back from core data.
// Something like:
NSManagedObjectSubclass *coreDataObject = ...
coreDataObject.externalId = newEvent.calendarItemExternalIdentifier;
// So, now let's say we pull the calendarItemExternalIdentifier string from
// Core Data, and want to remove the event.
NSString *externalId = ... // get calendarItemExternalIdentifier from Core Data
// getEventForIdentifer method from above
EKEvent *eventToRemove = [self getEventForIdentifer:externalId];
NSError *anError = nil;
[eventStore removeEvent:eventToRemove span:EKSpanThisEvent error:&anError];
if (anError) {
// Something has gone wrong. Report the error.
}