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 является подходящим способом, то что может быть причиной остановки всего файла?