我需要傳遞一些額外信息以及UIWebView loadRequest:
,以使其達到我的實現NSURLProtocol
。信息不能與NSURLRequest
綁定,因爲信息也必須保留在NSURLRequest mainDocumentURL
。所以我subclassed NSURL
和構造NSURLRequest
與它。我已經知道達到NSURLProtocol startLoading
的NSURLRequest
並不是我收到UIWebView loadRequest
的實例,所以我也實現了NSURL copyWithZone
,天真地期望URL加載系統將使用它。iOS:將自定義NSURL傳遞給NSURLProtocol
現在,NSURLProtocol canInitWithRequest
被稱爲不是一次,因爲人們會合理預期,但至少有4次之前startLoading
。前兩次,收到NSURLRequest
仍包含我的自定義NSURL
實施。然後不幸的內部代號叫CFURLCopyAbsoluteURL
詢問我的自定義NSURL
的absoluteURL
和下canInitWithRequest
(以及隨後的startLoading
)已經得到一個全新的NSURLRequest
與新鮮NSURL
。 copyWithZone
永遠不會被調用,我的子類NSURL
丟失。
在我放棄並實施一個低劣而脆弱的解決方案並將東西直接附加到URL字符串之前,我想問問更高級別的巫師是否看到了如何捕捉NSURLProtocol
雷達上的初始眨眼或如何欺騙CFURLCopyAbsoluteURL
承載我的自定義實例。我試圖通過再次返回我的自定義NSURL類的新實例來破解NSURL absoluteURL
,但它沒有幫助。我在NSURLProtocol setProperty
功能中看到了一些承諾,但現在看起來很沒用。 URL加載系統愉快地創建一切的新事例和NSURLRequest
抵達NSURLProtocol
似乎是隻有偶然進入UIWebView
的相同。
UPDATE:好,我想保持後儘可能短,但即使是第一次答覆是要求技術背景,所以在這裏我們去:我已經有多個UIWebView
S IN的應用程序。這些視圖可能會同時運行請求,並且絕對可以對同一個URL運行請求。這就像桌面瀏覽器中的標籤。但我需要區分哪個UIWebView
是到達NSURLProtocol
的每個特定NSURLRequest
的來源。我需要每個URL請求攜帶的上下文。我不能簡單地將URL映射到數據,因爲多個UIWebViews
可能隨時加載相同的URL。
更新2:將上下文信息附加到NSURL
是首選,並且據我瞭解,只有唯一可用的。問題是頁面內引用的資源請求(圖片等)根本不會經過UIWebViewDelegate
,直接以NSURLProtocol
結束。我沒有機會在NSURLProtocol
之前的任何地方觸摸,檢查或修改此類請求。這種請求的唯一上下文鏈接是它們的NSURLRequest mainDocumentURL
。
這裏的關鍵問題是你試圖在URL上加載更多關於'NSURL'的信息。所以問題是,你試圖通過什麼樣的信息?通常情況下,您可以通過將URL地圖存儲在「NSURLProtocol」可訪問的某個對象中的「其他數據」來避免這種情況,但我認爲更好地理解您嘗試解決的問題將對此有所幫助。 –
瞭解,請參閱更新。 –