2014-01-09 66 views
3

我從某個URL檢索.ics文件。我想在我自己的應用程序中以日曆和/或列表視圖呈現此文件的信息。我看了一下iCal4Objc(「https://github.com/cybergarage/iCal4ObjC」)和解析這樣的信息:導入.ics文件並在日曆或UITableView中顯示

-(NSMutableArray *)getPlanFromURL:(NSURL *)url { 
    NSMutableArray *planEntries = [[NSMutableArray alloc]init]; 

    NSString *storePath = [self loadICSAndReturnPathFromURL:url]; 

    CGICalendar *parserCalendar = [[CGICalendar alloc]initWithPath:storePath]; 
    for(CGICalendarObject *planObject in [parserCalendar objects]) { 
     for(CGICalendarComponent *component in [planObject components]) { 
      for (CGICalendarProperty *icalProp in [component properties]) { 
       NSString *icalPropName = [icalProp name]; 
       NSLog(@"%@",icalPropName); 
       if([icalPropName isEqualToString:SUMMARY]) { 
        [self.summaryArray addObject:[icalProp value]]; 
       } 

       else if([icalPropName isEqualToString:LOCATION]) { 
        [self.locationArray addObject:[icalProp value]]; 
       } 

       else if([icalPropName isEqualToString:CATEGORIES]) { 
        [self.categoryArray addObject:[icalProp value]]; 

       } 

       else if([icalPropName isEqualToString:DTSTART]) { 
        [self.startArray addObject:[icalProp dateValue]]; 

       } 

       else if([icalPropName isEqualToString:DTEND]) { 
        [self.endArray addObject:[icalProp dateValue]]; 

       } 
      } 
     } 

    } 

    for(int i = 0;i<[self.summaryArray count];i++) { 
     DECalEntry *entry = [[DECalEntry alloc]init]; 
     entry.summary = [self.summaryArray objectAtIndex:i]; 
     entry.roomInformation = [self.locationArray objectAtIndex:i]; 
     entry.category = [self.categoryArray objectAtIndex:i]; 
     entry.startDate = [self.startArray objectAtIndex:i]; 
     entry.endDate = [self.endArray objectAtIndex:i]; 

     if ([entry.category isEqualToString:@"Prüfung"]) { 
      entry.isExam = true; 
     } 
     else entry.isExam = false; 

     [planEntries addObject:entry]; 

    } 

    return planEntries; 

} 

-(NSString *)loadICSAndReturnPathFromURL:(NSURL *)url { 
    NSURLRequest * urlRequest = [NSURLRequest requestWithURL:url]; 
    NSURLResponse * response = nil; 
    NSError * error = nil; 
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest 
              returningResponse:&response 
                 error:&error]; 

    if (error == nil) 
    { 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *storePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"planData.ics"]; 

     [data writeToFile:storePath atomically:YES]; 
     return storePath; 

    } 
    NSLog(@"Error: %@",[error localizedDescription]); 

    return nil; 
} 

因爲這不是很乾淨,這將是一個痛苦,也能實現的UITableView並說明所分析的數據日曆視圖我問我是否存在一個框架,你知道哪個已經可以處理.ics文件並相應地顯示它們。

如果你有一個想法如何解決這個問題不那麼複雜和/或用更少的努力,我會非常感激。

也看看我的評論。目前,rrule財產根本不被考慮。但這是非常重要的,因爲它告訴我事件是否重複,直到它重複,等等......

回答

2

沒關係,我通過解析rrule屬性來解決這個問題,就像我對其他屬性做的那樣,並構建了一個方法,通過跟蹤該屬性包含的信息來創建適量的對象。那麼我只是覺得這是唯一的方法,因爲顯然沒有導入和解析.ics文件的框架。當我完成我的項目時,我可能會爲那些可能面對這一天的人開一槍。

1

據我所知,沒有Apple提供的框架或控件顯示.ics文件,但是一旦你構建EKEvent,有:

https://developer.apple.com/library/ios/documentation/EventKitUI/Reference/EKEventEditViewControllerClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009571

具體來說,要看看EventKitUI.framework。

+0

謝謝,我會看看它,並更新這個問題,當我得到第一個結果。 – dehlen

+0

好吧,我看了一下,但對我來說,它看起來並沒有真正幫助我,因爲我仍然需要解析信息,然後構建EKEvent。我面臨的主要問題是.ics文件有一個名爲RRULE的屬性,它定義了應該每隔x天重複約會直到某個日期。解析所有的信息真的很難,然後也考慮這個問題。這就是爲什麼我希望有一個框架,我可以輕鬆地解析/和或說明來自.ics文件的信息 – dehlen

+0

好的...你的問題是關於是否有一個UI組件可以解析和顯示日曆事件...我回答沒有,沒有,但有一個日曆顯示/添加控制。無論如何,很高興你知道你的問題。 –