使用NSURLProtocol實現離線快取

2021-07-26 19:11:55 字數 3254 閱讀 8408

一、說明:

",則只能攔截到"

",網頁內部的資源載入攔截不到。頁面跳轉屬於最初始請求之內,可以攔截到。

二、建立nsurlprotocol的子類,通過下面的**註冊此協議類:

[nsurlprotocol

registerclass

:[myurlprotocol

class

]];

三、下面是此子類的**:

#import "myurlprotocol.h"

#define myurlprotocolhandled @"myurlprotocolhandled"

//建立archive資料模型,重寫編碼解碼協議

#pragma mark - 重寫nsurlprotocol子類方法

+ (bool)caninitwithrequest:(nsurlrequest *)request

returnno;}

+ (nsurlrequest *)canonicalrequestforrequest:(nsurlrequest *)request

+ (bool)requestiscacheequivalent:(nsurlrequest *)a

torequest:(nsurlrequest *)b

- (void)startloading

else }

else }

- (void)stoploading

#pragma mark - 網路請求**

- (nsurlrequest *)connection:(nsurlconnection *)connection

willsendrequest:(nsurlrequest *)request

redirectresponse:(nsurlresponse *)response

return request; }

- (bool)connectionshouldusecredentialstorage:(nsurlconnection *)connection

- (void)connection:(nsurlconnection *)connection

didreceiveauthenticationchallenge:(nsurlauthenticationchallenge *)challenge

- (void)connection:(nsurlconnection *)connection

didcancelauthenticationchallenge:(nsurlauthenticationchallenge *)challenge

- (void)connection:(nsurlconnection *)connection

didreceiveresponse:(nsurlresponse *)response

- (void)connection:(nsurlconnection *)connection

didreceivedata:(nsdata *)data

else }

- (nscachedurlresponse*)connection:(nsurlconnection*)connection

willcacheresponse:(nscachedurlresponse *)cachedresponse

- (void)connectiondidfinishloading:(nsurlconnection *)connection

- (void)connection:(nsurlconnection *)connection

didfailwitherror:(nserror *)error

#pragma mark - 為請求建立快取路徑

- (nsstring *)cachepathforrequest:(nsurlrequest *)arequest

@end

@implementation nsurlrequest (mutablecopyworkaround)

- (id) mutablecopyworkaround

@end

@implementationmycachedata

-(id) initwithcoder:(nscoder *) adecoder

[self

setdata:[adecoder decodeobjectforkey:@"data"]];

[self

setrequest:[adecoder decodeobjectforkey:@"request"]];

[self

setresponse:[adecoder decodeobjectforkey:@"response"]];

returnself;}

- (void)encodewithcoder:(nscoder *)acoder

@end

部分****:

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...