1.APPdelegate里面注冊(cè)NSURLProtocol
[NSURLProtocolregisterClass:[CustomURLProtocolclass]];
CustomURLProtorcol 是繼承NSURLProtocol的類
2.遵守代理創(chuàng)建NSURLProtocol對(duì)象
@interfaceCustomURLProtocol()
@property(nonatomic,strong)NSURLConnection*connection
staticNSString*constURLProtocolHandledKey =@"URLProtocolHandledKey";//聲明鍵值
3.判斷攔截請(qǐng)求是何種請(qǐng)求

4.判斷攔截的內(nèi)容是否和上傳一樣,如果一樣就緩存上一次的

5.開始讀取本地加載的數(shù)據(jù)?
- (void)startLoading
{
NSURLRequest*request =self.request;
NSString*originUrlString = [request.URLabsoluteString];
NSLog(@"完整域名%@",originUrlString);
NSString*originHostString = [request.URLhost];
NSLog(@"主域名%@",originHostString);
if([Gamedictiondiccreategamedic].gamedictiondic==nil){
[Gamedictiondiccreategamedic].gamedictiondic=[NSMutableDictionarynew];
}
NSMutableDictionary*loadImageDic = [[NSMutableDictionaryalloc]init];
NSArray* array=[[NSArrayalloc]init];
array=@[@"bgFire.png",
@"avatar.jpg",
@"battle1.png",
@"battle2.png",
@"battle3.png",
@"battle4.png",
@"battle5.png",
@"battle6.png",
@"bg.jpg",
@"bgFire.png",
@"bgLoading.jpg",
@"blood.png",
@"booldIndicator.png",
@"bullet.png",
@"button1.png",
@"button2.png",
@"button3.png",
@"chat.png",
@"failure_bg.jpg",
@"failure_bg.png",
@"logout.png",
@"male.gif",
@"peng.png",
@"setting.png",
@"setting_bg.jpg",
@"share.png",
@"soundMute.png",
@"soundPlaying.png",
@"starting.jpg",
@"wall.png",
@"women.gif",
@"won_bg.jpg",
@"won_bg.png"
];
for(inti =0;i < (int)array.count;i++){
[loadImageDicsetObject:@"1"forKey:array[i]];
}
NSString* exestr=[originUrlStringpathExtension];
NSLog(@"后綴名%@",exestr);
BooleanimageFlag =false;
if([exestrisEqualToString:@"png"] || [exestrisEqualToString:@"jpg"]){
imageFlag =true;
}
if(imageFlag && [originHostStringisEqualToString:@"testpao.miusky.com"]){
NSString* lastimagestr=[originUrlStringsubstringFromIndex:53];
NSString* firstimagstr=[originUrlStringsubstringToIndex:53];
NSLog(@"截取前端的圖片%@",firstimagstr);
NSLog(@"截取后端的圖片的url%@",lastimagestr);
if([lastimagestrisEqualToString:@"bgFire.png"]){
NSLog(@"%@",loadImageDic);
}
NSLog(@"截取后端的圖片的after%@",[loadImageDicobjectForKey:[NSStringstringWithFormat:@"%@",lastimagestr]]);
NSLog(@"afar is %@",loadImageDic);
if([firstimagstrisEqualToString:[NSStringstringWithFormat:@"http://testpao.miusky.com:18080/statics/front/images/"]] && [loadImageDicobjectForKey:[NSStringstringWithFormat:@"%@",lastimagestr]] !=nil) {
NSString* bundlePath = [[NSBundlemainBundle]pathForResource:@"photo"ofType:@"bundle"];
NSString*strM = [bundlePathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@",lastimagestr]];
NSData* imagedata = [[Gamedictiondiccreategamedic].gamedictiondicobjectForKey:[NSStringstringWithFormat:@"%@",lastimagestr]];
if(imagedata==nil) {
imagedata = [NSDatadataWithContentsOfFile:strM];
[[Gamedictiondiccreategamedic].gamedictiondicsetObject:imagedataforKey:[NSStringstringWithFormat:@"%@",lastimagestr]];
}
NSString*mimeType=[NSStringstringWithFormat:@"image/jpg"];
NSURLResponse*response = [[NSURLResponsealloc]initWithURL:self.request.URL
MIMEType:mimeType
expectedContentLength:imagedata.length
textEncodingName:@"UTF8"];
//NSString *dataStr = [[NSString alloc] initWithData:imagedata encoding:NSUTF8StringEncoding];
//
//NSLog(@"%@",dataStr);
[[selfclient]URLProtocol:selfdidReceiveResponse:responsecacheStoragePolicy:NSURLCacheStorageNotAllowed];
[[selfclient]URLProtocol:selfdidLoadData:imagedata];
[[selfclient]URLProtocolDidFinishLoading:self];
NSLog(@"緩存的數(shù)據(jù)%@",self.request.URL);
}
}
NSMutableURLRequest*mutableReqeust = [[selfrequest]mutableCopy];
//打標(biāo)簽,防止無(wú)限循環(huán)
[NSURLProtocolsetProperty:@YESforKey:URLProtocolHandledKeyinRequest:mutableReqeust];
self.connection= [NSURLConnectionconnectionWithRequest:mutableReqeustdelegate:self];
}
6.讀取完的處理
- (void)stopLoading
{
[self.connectioncancel];
}
7.替換在線數(shù)據(jù)的代理方法
+(NSMutableURLRequest*)redirectHostInRequset:(NSMutableURLRequest*)request{
};
8.其他代理方法
#pragma mark - NSURLConnectionDelegate
- (void) connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response {
[self.clientURLProtocol:selfdidReceiveResponse:responsecacheStoragePolicy:NSURLCacheStorageNotAllowed];
NSLog(@"攔截的respon%@",response);
}
- (void) connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {
[self.clientURLProtocol:selfdidLoadData:data];
}
- (void) connectionDidFinishLoading:(NSURLConnection*)connection {
[self.clientURLProtocolDidFinishLoading:self];
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
[self.clientURLProtocol:selfdidFailWithError:error];
}