我从某个网址中检索.ics文件。我想在我自己的应用程序的日历和/或列表视图中显示此文件的信息。我看了一下iCal4Objc(“https://github.com/cybergarage/iCal4ObjC”)并解析了这样的信息:
-(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财产。但这非常重要,因为它告诉我一个事件是否重复,直到它重复等等......
答案 0 :(得分:2)
没关系我通过解析rrule属性就像我用其他属性做的那样自己工作,并构造了一个方法,通过遵循该属性包含的信息创建我需要的正确数量的对象。嗯,我只是认为这是唯一的方法,因为显然没有导入和解析.ics文件的框架。当我完成我的项目时,我可能会为那些可能面对这一天的人提供一个机会。
答案 1 :(得分:1)
据我所知,Apple没有提供显示.ics文件的框架或控件,但是一旦构建了EKEvent,就会有:
具体来说,您想看一下EventKitUI.framework。