2016-04-05 82 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 
    }];