Я перехватываю тип URL-адреса в веб-просмотре, который я использую в своем приложении, чтобы загрузить файл, на который он ссылается, вместо того, чтобы просто пытаться открыть его в веб-просмотре. Ссылка на файл .ics. Поэтому я загружаю этот файл во временный каталог, а затем открываю файл в экземпляре UIDocumentInteractionController, но Календарь не отображается как одно из приложений, в котором можно открыть этот файл .ics, только Mail, DropBox и «Копировать».
Как вы можете видеть в закомментированной строке в коде ниже, я пытался сделать ссылку открытой с помощью webcal:// спереди вместо http://, а также вручную установить UTI UIDocumentInteractionController безрезультатно. Есть ли какая-то причина, по которой мой локальный файл .ics не будет отображать Календарь как вариант для его открытия?
//Test for link to an ics file
if ([urlToLoad rangeOfString:@"GetSingleEventCalendarFile" options:NSCaseInsensitiveSearch].location != NSNotFound)
{
//urlToLoad = [urlToLoad stringByReplacingOccurrencesOfString:@"http" withString:@"webcal"];
//NSData *contact = [NSData dataWithContentsOfURL:[NSURL URLWithString:webCalProtocol]];
//return NO;
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlToLoad]];
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *resp, NSData *respData, NSError *error){
NSString *urlString = [req.URL absoluteString];
NSString *actIdAndRest = [urlString substringFromIndex:[urlString rangeOfString:@"="].location + 1];
NSString *actId = [actIdAndRest substringToIndex:[actIdAndRest rangeOfString:@"&"].location];
NSString *fileName = [[@"activity" stringByAppendingString:actId] stringByAppendingString:@".ics"];
NSString * path = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName];
NSError *errorC = nil;
BOOL success = [respData writeToFile:path
options:NSDataWritingFileProtectionComplete
error:&errorC];
if (success) {
NSBundle * bundleContaining = [NSBundle bundleWithPath:NSTemporaryDirectory()];
NSLog(@"%@", bundleContaining);
NSURL *fileURL = [bundleContaining URLForResource:fileName withExtension:@"ics"];
documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
//documentController.UTI = @"ics";
[documentController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];
} else {
NSLog(@"fail: %@", errorC.description);
}
}];
}