UIWebView Делегат получить MIME Тип

UIWebView не поддерживает автоматическую обработку файлов Passbook .pkpass.

В этомтехническое примечаниеApple рекомендует реализовать проверку с помощью методов UIWebViewDelegate, чтобы определить тип MIME и обработать его соответствующим образом.

Чтобы добавить проходы с использованием UIWebView, реализуйте соответствующие методы UIWebViewDelegate, чтобы определить, когда представление загружает данные с помощью типа MIME application / vnd.apple.pkpass

Тем не менее, я не могу найти ничего внутриСправочник по протоколу делегата UIWebView который способен обеспечить тип MIME.

Я могу успешно загружать и обрабатывать файлы напрямую, используяNSURLConnection делегировать без проблем, но я хочу, чтобы проходы были правильно обработаны, если пользователь нажимает кнопку «Добавить в Passbook» во время просмотра в UIWebView. Поскольку я не знаю ссылку, и многие провайдеры не ставят свои ссылки с расширением .pkpass, следование советам Apple по проверке типа MIME кажется наилучшим способом.

Я попытался добавить следующее

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)newRequest 
                                                 navigationType:(UIWebViewNavigationType)navigationType 
{

   NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[newRequest URL]];

   // Spoof iOS Safari headers for sites that sniff the User Agent
   [req addValue:@"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" forHTTPHeaderField:@"User-Agent"];

   NSURLConnection *conn = [NSURLConnection connectionWithRequest:newRequest delegate:self];

   return YES;
} 

мойNSURLConnection делегат:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSString *mime = [response MIMEType];

    if ([mime isEqualToString:@"application/vnd.apple.pkpass"] && ![_data length]) {

        _data = nil; // clear any old data
        _data = [[NSMutableData alloc] init];

        [_webPanel stopLoading];
    }
}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
    [_data appendData:data];
    NSLog(@"Size: %d", [_data length]);
}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{

    if ([_data length]) {

        PKAddPassesViewController  *pkvc = [PassKitAPI  presentPKPassFileFromData:_data];
        pkvc.delegate = self;
        [self presentViewController:pkvc
                           animated:YES
                         completion:nil];
    }
}

NSURLConnection делегаты работают нормально, когда соединение вызывается напрямую, безUIWebView, Тем не менее, когда я пытаюсь запуститьNSURLConnection изUIWebView делегировать проход загрузки не удается, потому что загружается только 80% .pkpass (я получаю случайное несоответствие байтов в переменной _data и заголовке Content-Length).

Итак, мои вопросы:

Есть ли более простой способ получитьMIME типа, прямо изUIWebView Делегировать методы?Если нет, то я иду по этому пути правильным путем открытия параллельного NSURLConnection, или есть лучший способ?Если NSURLConnection является подходящим способом, то что может быть причиной остановки всего файла?

Ответы на вопрос(3)

Ваш ответ на вопрос