11

変更中のファイルを UIWebView にロードしたいのですが、ファイルを file:// スキームの下にロードして、ページに他の file:// リソース (html5 ビデオ要素など) を含めることができるようにします。これを行うには、独自の NSURLProtocol を実装し、file:// URL のサブセットの読み込みをオーバーライドします。

私のstartLoading方法は次のようになります。

- (void) startLoading {
    ... data is populated ...
    [protocolClient URLProtocol:self didLoadData:data];
    [protocolClient URLProtocolDidFinishLoading:self];
}

これは iOS4/5 では問題なく動作しますが、iOS 6 ベータ 4 では次のエラーが発生します。

2012-08-21 16:06:07.236 TemplateApp[57283:1d403] 57283: CFNetwork internal error (0xc01a:/SourceCache/CFNetwork_Sim/CFNetwork-606/Connection/URLConnectionClient.cpp:2341)
/SourceCache/WebCore_Sim/WebCore-1634/wak/WKView.mm:385 void WKViewAddSubview(WKViewRef, WKViewRef):  invalid parameter
2012-08-21 16:06:07.272 TemplateApp[57283:1e603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSSetM addObject:]: object cannot be nil'
*** First throw call stack:
(0x29d0552 0x2733e7e 0x2a5dc08 0x69c6c1e 0x69c4c88 0x69c543b 0x5b40dbd 0x5b40f0f 0x5b3c240 0x5ff8060 0x5ff75d1 0x5eb8d08 0x65a4fb2 0x678486f 0x677fa3d 0x7b3ab1 0x7b2d63 0x7f0e5a 0x2972ebd 0x7f14dc 0x7f1455 0x6db410 0x29544ff 0x2953f2f 0x2976cf4 0x2976504 0x29763db 0x69d0530 0x907caed9 0x907ce6de)
libc++abi.dylib: terminate called throwing an exception

次のようdidReceiveResponseにメソッドへの呼び出しを追加して、これを解決しました。startLoading

- (void) startLoading {
    ... data is populated ...
    [protocolClient URLProtocol:self didReceiveResponse:[[NSURLResponse alloc] init] cacheStoragePolicy:NSURLCacheStorageAllowed]
    [protocolClient URLProtocol:self didLoadData:data];
    [protocolClient URLProtocolDidFinishLoading:self];
}

ただし、iOS 5 および 6 では、ページを読み込もうとすると次のエラーが発生します。

Webview error: Error Domain=WebKitErrorDomain Code=102 "Frame load interrupted" UserInfo=0x9d4c0a0 {NSErrorFailingURLKey=file:///src/index.html, NSErrorFailingURLStringKey=file:///src/index.html, NSLocalizedDescription=Frame load interrupted}

メソッドでさまざまな NSURLResponse オブジェクトを試しましたdidReceiveResponseが、WebView がページを読み込むことはできませんでした。file:// 以外の URL スキームを使用することもできますが、HTML5 ビデオなどの埋め込みリソースに file:// パスを使用することはできません。

特定の file:// URL の動的コンテンツを、iOS 6 ベータ 4 で動作する UIWebView にロードする方法はありますか?

4

2 に答える 2

1

現在、UIWebViewへのコンテンツの読み込みに関して他の問題が発生していますが、を使用する必要があると思いますNSURLResponseinitWithURL:MIMEType:expectedContentLength:textEncodingName:

そうでなければ、あなたは有効な応答オブジェクトを持っていないと思います。私が抱えている問題は、startLoading呼び出される前に「不正なURL」を取得していることです。

更新:私は今それを動作させました、どうやら私canonicalRequestForRequest:は間抜けでした

于 2012-08-24T20:37:05.693 に答える