2016-04-05 83 views
1

我得到的警告:重构afnetworking POST请求到3.0

Incompatible pointer types assigning to 'AFHTTPSessionManager *' from 'NSURLSessionDataTask * _Nullable'

'POST:parameters:success:failure:' is depreceated 

当试图与AFNetworking 3.0的请求。我想知道用AFNewtworking 3.0为使用iOS 7.0或更高版本的应用程序发出发布请求的正确方法。这里是我的代码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager setResponseSerializer:[SignupResponseSerializer serializer]]; 

    __weak typeof(self)weakSelf = self; 

    NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kRegisterURL]; 

    NSData *plainData = UIImagePNGRepresentation(self.profilePicture); 
    NSString *base64String = [plainData base64EncodedStringWithOptions:0]; 

    if (self.firstNameField.text && self.lastNameField.text && self.passwordField.text && self.emailField.text) { 
     NSDictionary *params = @{ @"first_name": self.firstNameField.text, @"last_name": self.lastNameField.text, @"password": self.passwordField.text, @"email": self.emailField.text, @"avatar_data": base64String}; 

     self.sessionManager = [manager POST:urlString parameters:params success:^(NSURLSessionTask *task, id responseObject) { 
      NSDictionary *JSON = [responseObject objectAtIndex:0]; 
      NSString *token = JSON[@"auth_token"]; 
      NSString *avatarURL = JSON[@"avatar_url"]; 


      weakSelf.credentialStore.avatarURL = avatarURL; 
      weakSelf.credentialStore.authToken = token; 
      weakSelf.credentialStore.firstName = self.firstNameField.text; 
      weakSelf.credentialStore.lastName = self.lastNameField.text; 
      weakSelf.credentialStore.email = self.emailField.text; 
      weakSelf.credentialStore.password = self.passwordField.text; 

      [SVProgressHUD dismiss]; 
      [self dismissViewControllerAnimated:YES completion:nil]; 
     } failure:^(NSURLSessionTask *task, NSError *error) { 
//   if (task.isCancelled) { 
//    return; 
//   } 
      [SVProgressHUD showErrorWithStatus:@"Login Failed"]; 
      NSLog(@"%@", error); 
     }]; 
    } 

回答

1

在AFNetworking 3.0 POST方法返回与您的请求NSURLSessionDataTask对象。 另外现在它有一个progress参数,这是一个被调用来跟踪请求进度的块。
因此,我建议你改变这个方法调用:

self.sessionManager = [manager POST:urlString parameters:params success:^(NSURLSessionTask *task, id responseObject) { 
... 

这样:

//If you want a reference to the manager you can initialize the sessionManager var like this but it's not necessary 
self.sessionManager = manager; 
[manager POST:urlString parameters:params progress:^(NSProgress * _Nonnull uploadProgress) { 
     //progress block implementation 
    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     //success block implementation 
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     //failure block implementation 
    }];