1

カレンダーにいくつかのイベントを追加し、それらの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デバイスのどこにカレンダーデータベースが保存されているか。

4

0 に答える 0