AFN 프레임 사용 정리
Point Advice: AFN 이 UIKit 에 대한 분 류 를 배 워 서 자신의 능력 향상 에 도움 이 됩 니 다.
-(void)get1 {
//1. AFHTTPRequestOperationManager
//AFHTTPRequestOperationManager NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//2.
/*
http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON
:NSString ,AFN url
: , ,AFN POST GET , NSData
: Block
: Block
*/
NSDictionary *param = @{
@"username":@"",
@"pwd":@""
};
// :
[manager GET:@"http://120.25.226.186:32812/login" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog(@" ---%@",responseObject);
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
NSLog(@" ---%@",error);
}];
}
-(void)get2 {
//1. AFHTTPSessionManager
//AFHTTPSessionManager NSURLSession
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.
NSDictionary *param = @{
@"username":@"",
@"pwd":@""
};
// :responseObject: (AFN OC , )
[manager GET:@"http://120.25.226.186:32812/login" parameters:param success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@" ---%@",[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
NSLog(@" ---%@",error);
}];
}
(2) AFN 으로 파일 다운로드
-(void)download {
//1.
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
//2.
/*
:
:
:block , url , AFN
targetPath:AFN ,tmp
response:
:
:block ,
response:
filePath: == block
error:
*/
//2.1
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_02.png"]];
//2.2 ,
NSProgress *progress = nil;
NSURLSessionDownloadTask *downloadTask = [manage downloadTaskWithRequest:request progress:&progress destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//
NSString *fullpath = [caches stringByAppendingPathComponent:response.suggestedFilename];
NSURL *filePathUrl = [NSURL fileURLWithPath:fullpath];
return filePathUrl;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nonnull filePath, NSError * _Nonnull error) {
NSLog(@" ---%@",filePath);
}];
//2.3 KVO
[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];
//3.
[downloadTask resume];
}
//
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(NSProgress *)progress change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%zd--%zd--%f",progress.completedUnitCount,progress.totalUnitCount,1.0 * progress.completedUnitCount/progress.totalUnitCount);
}
2. AFN 파일 업로드 1. 파일 업로드 연결 데이터 의 첫 번 째 방식
[formData appendPartWithFileData:data name:@"file" fileName:@"xxoo.png" mimeType:@"application/octet-stream"];
2. 파일 에 맞 춤 형 데 이 터 를 업로드 하 는 두 번 째 방법
[formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"xx.png" mimeType:@"application/octet-stream" error:nil];
3. 파일 에 맞 춤 형 데 이 터 를 업로드 하 는 세 번 째 방식
[formData appendPartWithFileURL:fileUrl name:@"file" error:nil];
4. [주] 자료 에 파일 업로드 에 사용 할 분 류 를 제 공 했 습 니 다.
/ 파일 업로드 와 관련 된 코드 는 다음 과 같 습 니 다 /
-(void)upload {
//1.
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2. POST
/*
: :NSString
:
:block
, formData
: block
task:dataTask( )
responseObject:
: block
error: , , error
*/
NSDictionary *dict = @{
@"username":@""
};
[manager POST:@"http://120.25.226.186:32812/upload" parameters:dict constructingBodyWithBlock:^(id _Nonnull formData) {
// NSData
UIImage *image = [UIImage imageNamed:@"123"];
NSData *data = UIImagePNGRepresentation(image);
/*
//
:
:
:
: MIMEType
*/
[formData appendPartWithFileData:data name:@"file" fileName:@"xxoo.png" mimeType:@"application/octet-stream"];
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@" ---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
NSLog(@" --%@",error);
}];
}
-(void)upload2 {
NSLog(@"%s",__func__);
//1.
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2. POST
/*
: :NSString
:
:block
, formData
: block
task:dataTask( )
responseObject:
: block
error: , , error
*/
NSDictionary *dict = @{
@"username":@""
};
[manager POST:@"http://120.25.226.186:32812/upload" parameters:dict constructingBodyWithBlock:^(id _Nonnull formData) {
// url
NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/username/Desktop/KF[WTI`AQ3T`A@3R(B96D89.gif"];
/*
//
: url
:
:
: mimetype
:
*/
// [formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"xx.png" mimeType:@"application/octet-stream" error:nil];
//
/*
: , url , mimetype
*/
[formData appendPartWithFileURL:fileUrl name:@"file" error:nil];
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@" ---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
NSLog(@" --%@",error);
}];
}
3. AFN 을 사용 하여 직렬 화 처리 / * 1. AFN 내부 에서 기본적으로 서버 응답 데 이 터 를 json 으로 해석 하기 때문에 서버 가 JSON 데이터 가 아 닌 것 으로 되 돌아 오 면 오 류 를 요청 합 니 다. 이 럴 때 응답 정보 에 대한 AFN 분석 방식 을 설정 해 야 합 니 다.AFN 은 다음 과 같은 세 가지 응답 정 보 를 분석 하 는 방식 을 제공 했다.
3. 관련 코드
-(void)serialized {
//1. , NSURLSession
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
/* 1: AFN */
// XML, AFN, XML
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
// ,
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// JSON
//manager.responseSerializer = [AFJSONResponseSerializer serializer];
/* 2 AFN, ,
[AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet setWithObject:@"text/xml"];
//2. ,GET & ?
NSDictionary *dict = @{
@"username":@"223",
@"pwd":@"ewr",
@"type":@"XML"
};
//3. GET
[manager GET:@"http://120.25.226.186:32812/login" parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
//4. block
NSLog(@"%@",[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
//5. , error
NSLog(@"%@",error);
}];
}
4. AFN 을 사용 하여 네트워크 상 태 를 감지 합 니 다 / * 설명: AFN 프레임 워 크 의 AFNetworkReachability Manager 를 사용 하여 네트워크 상태의 변 화 를 감청 할 수도 있 고 애플 이 제공 하 는 Reachability 를 이용 하여 감청 할 수도 있 습 니 다.개발 중 AFN 프레임 워 크 처 리 를 직접 사용 하 는 것 을 권장 합 니 다. * / /네트워크 상태의 변 화 를 AFN 프레임 워 크 로 감지 합 니 다.
-(void)AFNReachability {
//1.
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
//2.
/*
AFNetworkReachabilityStatusUnknown =
AFNetworkReachabilityStatusNotReachable =
AFNetworkReachabilityStatusReachableViaWWAN = 3G
AFNetworkReachabilityStatusReachableViaWiFi = WIFI
*/
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@" ");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@" ");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
default:
break;
}
}];
//3.
[manager startMonitoring];
}
/ / 애플 이 제공 하 는 Reachability 를 사용 하여 네트워크 상 태 를 감지 하고 네트워크 상 태 를 지속 적 으로 감청 하려 면 알림 과 함께 사용 해 야 합 니 다.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//1.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange) name:kReachabilityChangedNotification object:nil];
//2. ,
Reachability *r = [Reachability reachabilityForInternetConnection];
[r startNotifier];
// ,
self.r = r;
}
// ,
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)networkChange
{
//
if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus == ReachableViaWWAN)
{
NSLog(@" 3G");
return;
}
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == ReachableViaWiFi)
{
NSLog(@" wifi");
return;
}
NSLog(@" ");
}
5. AFN 사용 기법 1. 개발 할 때 도구 류 를 만 들 수 있 습 니 다. AFN 에서 요청 한 관리 자 를 계승 하고 컨트롤 러 에서 요청 한 코드 는 자신 이 봉 인 된 도구 류 를 사용 합 니 다.2. 이렇게 하 는 장점 은 나중에 바 텀 의존 구 조 를 수정 하면 우 리 는 이 도구 류 를 수정 하면 되 고 더 이상 수정 하지 않 아 도 된다 는 것 이다.3. 이 도구 류 는 일반적으로 하나의 사례 방법 을 제공 하 는데 이 방법 에서 기본 적 인 요청 경 로 를 설정 합 니 다.4. 이 방법 은 보통 GET 나 POST 요청 에 대한 패 키 지 를 제공 합 니 다.5. 외부 에 있 을 때 이 도구 클래스 를 통 해 요청 을 보 냅 니 다. 6. 단일 방법:
+ (instancetype)shareNetworkTools {
static XMGNetworkTools *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// : BaseURL /
instance = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://120.25.226.186:32812/"]];
});
return instance;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.