2

すべての iCal イベントを isc ファイルにエクスポートするアプリケーションを作成する必要があります。Cocoa アプリケーション、コマンド ライン ツール、または AppleScript アプリケーションを使用していますか?....CalendarStore Framework を使用して、AppleScript アプリケーションでこれを実行しようとしています。すべてのイベントを取得できますが、それらを ics ファイルに保存するにはどうすればよいですか??

これが私のコードです:

    - (IBAction)btnSelector:(id)sender {
CalCalendarStore *calendarStore = [CalCalendarStore defaultCalendarStore];
NSDate *startDate=[[NSDate alloc] init];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
startDate=[formatter dateFromString:@"2010-01-01 00:00:00"];                             
NSDate *endDate=[[NSDate alloc] init];    
 endDate=[formatter dateFromString:@"2050-01-01 00:00:00"];

 NSArray *calendars = [calendarStore calendars];
    NSPredicate *allEventsPredicate = [CalCalendarStore eventPredicateWithStartDate:startDate endDate:endDate calendars:[calendarStore calendars]];

NSArray *events = [calendarStore eventsWithPredicate:allEventsPredicate]; 

for(CalEvent *event in events)
{
    //here i must save event to file...
    NSLog(@"%@",event);
    }

for (CalCalendar *calendar in calendars) {

    self.lblNotification.title=[NSString stringWithFormat:@"%@  %@",self.lblNotification.title,calendar.title];

}

 }
4

2 に答える 2

1

私は問題を解決しました...今はCalendareStoreフレームワークを使用していません。カレンダーフォルダーの内容を読むだけです:

NSFileManager *fileManager = [[NSFileManager alloc] init];
//   /Users/username/Library/Calendars
NSError *err;

NSArray *usersFolder = [fileManager contentsOfDirectoryAtPath:@"/Users" error:&err];

for (NSString *dirElement in usersFolder) {
   // NSLog(@"users folder : %@",dirElement);

    NSString *userCalendarPath = [NSString stringWithFormat:@"/Users/%@/Library/Calendars",dirElement];
    NSArray *contentCalendarDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:userCalendarPath error:nil];
    NSArray *calendarFolders = [contentCalendarDirectory filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.calendar'"]];

    NSMutableArray *calendarNames= [[NSMutableArray alloc]  init];

    for(NSString *calendarFolder in calendarFolders)
    {
       // NSLog(@"calendar folder %@/%@",userCalendarPath,calendarFolder);

        NSString * fullCalendarInfoPath = [NSString stringWithFormat:@"%@/%@/Info.plist",userCalendarPath,calendarFolder];
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: fullCalendarInfoPath];


        NSString * eventsDirectory = [NSString stringWithFormat:@"%@/%@/Events",userCalendarPath,calendarFolder];
        NSArray *contentEventsDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:eventsDirectory error:nil];
        NSArray *events = [contentEventsDirectory filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.ics'"]];


        for(NSString* eventName in events)
        {
            NSString * eventPath = [[NSString alloc] initWithFormat:@"%@/%@/Events/%@",userCalendarPath,calendarFolder,eventName];
             //this array contain all ics paths...
//to read file content:
//NSString *eventContent = [[NSString alloc] initWithContentsOfFile:eventPath encoding:NSUTF8StringEncoding error:nil];
            [eventsPath addObject:eventPath];

          }
         NSString* calendarTitle = [dict objectForKey: @"Title"];

        [calendarNames addObject:[NSString stringWithFormat:@"%@  (%lu events)",calendarTitle,[events count]]];

    }
    if(calendarNames.count>0)
    { 
       NSDictionary *userCalendars = [NSDictionary dictionaryWithObjectsAndKeys:dirElement,@"parent",calendarNames,@"children", nil];
       [dataCalendars addObject:userCalendars];
       }    
         }
于 2012-07-24T12:13:44.337 に答える