2017-08-16 8 views
0

PDFDocument.init(url:)を使用しようとすると、httpで動作することに気づきましたが、httpsのURLでは動作しませんでした。なぜ誰が知っていますか?PDFKitのPDFDocument init(URL:URL)がHTTPSで動作しない

import PDFKit 

let httpURL = URL(string: "http://www.axmag.com/download/pdfurl-guide.pdf")! 
let doc1 = PDFDocument(url: httpURL) //makes a PDFDocument 

let httpsURL = URL(string: "https://www.gnu.org/s/libmicrohttpd/tutorial.pdf")! 
let doc2 = PDFDocument(url: httpsURL) //nil 

答えて

1

これは、一見、これはCocoaフレームワークの共通の問題のようです。多くのAPIはURLを取得しますが、多くの場合、どのようなスキームが受け入れられるかは不明です。ファイルURLを取るだけのものと、HTTPを取るものとHTTPとHTTPSを取るものがあり、ドキュメンテーションには何が起こるかについて何も言わないことがよくあります。ドキュメンテーションに他のことが述べられていない場合は、おそらくAPIにはfile:のURLしか受け入れられないというのは良い仮定です。あなたは少し深く見たとき、それは一見現れるよう

はしかし、それは問題の限りではありません。あなたのケースでは、データのtry init(contentsOf:)サポートHTTPSをしているを使用して、そこから自分のPDFDocumentを初期化することによって自明問題を回避することができますが、これは実際にそれについて移動する最良の方法ではありません。代わりに実際には、URLSessionのような非同期APIを使用して、サーバーからPDFデータを読み込むことをお勧めします。なぜなら、ネットワークからのデータ読み込みには時間がかかることがあります。特にPDFファイルのサイズが大きくなることがあります。メインスレッドでファイルを同期して読み込もうとすると、ブロックしてアプリはロックされているかのように表示されます。 PDFデータを非同期にロードすることで、ユーザーの進捗情報と操作をキャンセルする方法を提供することができます。また、途中でネットワークがダウンするなど、問題が発生した場合は、感覚的な方法。データがすべてダウンロードされたら、結果のDataオブジェクトを使用してPDFDocumentを初期化できます。

あなたの質問に答えるために、PDFDocumentがHTTPSをサポートしない理由は私が推測するように、このような同期イニシャライザはネットワーク経由で何かを読み込むための方法ではないため、その目的のために設計することは優先事項ではありませんでした。

ここでは、お使いのネット​​ワークが非同期であることのAppleの推奨へのリンクです:https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010220-CH12-SW3

関連する問題