カレンダーにいくつかのイベントを追加し、それらのeventIdentifierをファイルに保存しました。すべてのイベントを削除したい場合は、そのファイルから配列にeventIdentifierを読み取り、イベントIDを持つ各イベントを削除します。カレンダーにイベントを追加し、イベントIDをファイルに保存するコードは次のとおりです。
- (void) addEventToCalendar: (id)object
{
@autoreleasepool {
int i = 0;
NSString *string_to_file = @"";
eventStore=[[EKEventStore alloc] init];
for(Schedule *sche in scheduleArray){
EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
addEvent.title=sche.course_Name;
addEvent.startDate = [self stringToDate:sche.from_Date];
addEvent.endDate = [self stringToDate:sche.thru_Date];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
NSDate *date_alarm = [addEvent.startDate dateByAddingTimeInterval:-(10*60)];
addEvent.alarms=[NSArray arrayWithObject:[EKAlarm alarmWithAbsoluteDate:date_alarm]];
NSError *err;
// do save event to calendar
[eventStore saveEvent:addEvent span:EKSpanThisEvent error:&err];
if (err == nil) {
NSString* str = [[NSString alloc] initWithFormat:@"%@", addEvent.eventIdentifier];
string_to_file = [string_to_file stringByAppendingString:str];
string_to_file = [string_to_file stringByAppendingString:@"\n"];
NSLog(@"String %d: %@",i, str);
}
else {
NSLog(@"Error %@",err);
}
i++;
}
// create file to save
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
inFile = [NSFileHandle fileHandleForWritingAtPath: filePath];
NSData *data = [string_to_file dataUsingEncoding:NSUTF16StringEncoding];
[inFile writeData:data];
}
}
そして、私がカレンダーに追加したすべてのイベントを削除するための以下のコード
- (void) deleteEventInCalender {
filemgr = [NSFileManager defaultManager];
NSString *filePath = [self getFilePath:@"saveeventid.txt"];
NSFileHandle *inFile;
inFile = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *dataFile;
dataFile = [inFile readDataToEndOfFile];
NSString *tmp = @"";
NSString *temp = @"";
tmp = [NSString stringWithCharacters:[dataFile bytes] length:[dataFile length]/sizeof(unichar)];
if(![tmp isEqualToString:@""]){
tmp = [tmp substringFromIndex:1];
event_idArray = [[NSMutableArray alloc] init];
int j = 0;
while (![tmp isEqualToString:@""]){
int index_find_string = [tmp rangeOfString:@"\n"].location;
temp = [tmp substringWithRange:NSMakeRange(0, index_find_string)];
[event_idArray addObject:temp];
tmp = [tmp substringFromIndex:index_find_string + 1];
}
EKEventStore* store = [[EKEventStore alloc] init];
j = 0;
for(NSString *eventid in event_idArray){
EKEvent* event2 = [store eventWithIdentifier:eventid];
if (event2 != nil) {
NSLog(@"log: %d log id: %@", j, eventid);
NSError* error = nil;
// remove event
[store removeEvent:event2 span:EKSpanThisEvent error:&error];
}
j++;
}
[filemgr removeItemAtPath:filePath error:nil];
}
}
上記のすべてのコードは、calendar.sqlitedbを使用してiOSシミュレーターでテストするとうまく機能します。しかし、iPadデバイス5.0で実行すると、奇妙なエラーが発生します。それは、カレンダーがイベントを削除しない場合や、すべてのイベントが削除された後、数分後にすべてのイベントが再び表示される場合があります...わかりません。理由がわかりません。非常に混乱しています。誰かが私と同じ問題を抱えていますか?あなたの解決策を共有してください!
別の質問を追加しました:iOS5.0デバイスのどこにカレンダーデータベースが保存されているか。