首先導(dǎo)入頭文件#import "Reachability.h"(注意:這個(gè)頭文件的類在網(wǎng)上搜"iOS判斷網(wǎng)絡(luò)"就能搜到了)
還有頭文件#import <CommonCrypto/CommonDigest.h>
/** 實(shí)現(xiàn)block 回調(diào)的處理數(shù)據(jù)方法. */
-
(void)networkingWithURL:(NSString *)urlString block:(void (^)(id))block {
BOOL isExistenceNetwork = YES;
Reachability *reach = [Reachability reachabilityForInternetConnection];
switch ([reach currentReachabilityStatus]) {
case NotReachable:{ isExistenceNetwork = NO; NSLog(@"沒網(wǎng)"); break; } case ReachableViaWiFi:{ isExistenceNetwork = YES; break; } case ReachableViaWWAN:{ isExistenceNetwork = YES; break; }}
// 將鏈接的中文部分專成ascii 碼形式.
NSString *codeString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];if (isExistenceNetwork) {
NSURL *url = [NSURL URLWithString:codeString]; // 開通道. NSURLSession *session = [NSURLSession sharedSession]; // 添加任務(wù). NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 返回主線程. dispatch_async(dispatch_get_main_queue(), ^{ // 判斷有數(shù)據(jù)的時(shí)候才執(zhí)行下面代碼. if (data) { NSString *defaut = @"default/com.hackemist.SDWebImageCache.default/"; NSString *behind = @".data"; NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString* path =[libPath stringByAppendingPathComponent:[defaut stringByAppendingFormat:@"%@%@",[NetworkingHandler md5HexDigest:codeString],behind]]; [data writeToFile:path atomically:YES]; // JSON 解析數(shù)據(jù). id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; // block 回調(diào). block(result); } }); }]; // 開始任務(wù). [task resume];} else {
NSLog(@"沒有網(wǎng)絡(luò)(斷網(wǎng))"); NSString *defaut = @"default/com.hackemist.SDWebImageCache.default/"; NSString *behind = @".data"; NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString* path =[libPath stringByAppendingPathComponent:[defaut stringByAppendingFormat:@"%@%@",[NetworkingHandler md5HexDigest:codeString],behind]]; NSMutableData *data = [NSMutableData dataWithContentsOfFile:path]; // NSLog(@"%@", data); if (data == nil) { return; } else { id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; block(result); }}
}
/** 實(shí)現(xiàn)Delegate 回調(diào)的處理數(shù)據(jù)方法. */
-
(void)networkingWithURL:(NSString *)urlString delegate:(id<NetworkingHandlerDelegate>)delegate {
BOOL isExistenceNetwork = YES;
Reachability *reach = [Reachability reachabilityForInternetConnection];switch ([reach currentReachabilityStatus]) {
case NotReachable:{ isExistenceNetwork = NO; NSLog(@"沒網(wǎng)"); break; } case ReachableViaWiFi:{ isExistenceNetwork = YES; break; } case ReachableViaWWAN:{ isExistenceNetwork = YES; break; }}
// 將鏈接的中文部分專成ascii 碼形式.
NSString *codeString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];if (isExistenceNetwork) {
NSURL *url = [NSURL URLWithString:codeString]; // 開通道. NSURLSession *session = [NSURLSession sharedSession]; // 添加任務(wù). NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 返回主線程. dispatch_async(dispatch_get_main_queue(), ^{ // 判斷有數(shù)據(jù)的時(shí)候才執(zhí)行下面代碼. if (data) { NSString *defaut = @"default/com.hackemist.SDWebImageCache.default/"; NSString *behind = @".data"; NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString* path =[libPath stringByAppendingPathComponent:[defaut stringByAppendingFormat:@"%@%@",[NetworkingHandler md5HexDigest:codeString], behind]]; [data writeToFile:path atomically:YES]; // JSON 解析數(shù)據(jù). id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; // delegate 回調(diào). if ([delegate respondsToSelector:@selector(handleDataOverWithResult:)]) { [delegate handleDataOverWithResult:result]; } } }); }]; // 開始任務(wù). [task resume];} else {
NSLog(@"沒有網(wǎng)絡(luò)(斷網(wǎng))"); NSString *defaut = @"default/com.hackemist.SDWebImageCache.default/"; NSString *behind = @".data"; NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString* path =[libPath stringByAppendingPathComponent:[defaut stringByAppendingFormat:@"%@%@",[NetworkingHandler md5HexDigest:codeString], behind]]; NSMutableData *data = [NSMutableData dataWithContentsOfFile:path]; if (data == nil) { return; } else { NSError *errorJOSON = nil; id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&errorJOSON]; if ([delegate respondsToSelector:@selector(handleDataOverWithResult:)]) { [delegate handleDataOverWithResult:result]; } }}
}
pragma mark ** md5加密
-
(NSString )md5HexDigest:(NSString)input {
const char* str = [input UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, (unsigned int)strlen(str), result);
NSMutableString *hash = [NSMutableString string];
for (int i = 0; i < 16; i++) {
[hash appendFormat:@"%02X", result[i]];}
NSString *mdfiveString = [hash lowercaseString];
return mdfiveString;
}