2016-07-03 13 views
0

Ich brauche die Profis hier, um mich aufzuklären, was mit meinem Code falsch ist. Ich versuche, von 2.x auf 3.x zu migrieren und bekomme eine Migräne.AFNetworking 3.0 Post Issues

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
NSDictionary *parameters = @{@"email": email, @"password": password}; 
[manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
    NSData *jsonData = [responseStr dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData 
                 options:0 
                  error:nil]; 
    if ([[json objectForKey:@"success"] intValue] != 1) { 
     UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"" message:self.error_login delegate:nil cancelButtonTitle:self.continueButton otherButtonTitles:nil]; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     [alert show]; 
    } else { 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     AccountViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"account"]; 
     NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]]; 
     [viewControllers removeLastObject]; 
     [viewControllers addObject:vc]; 
     [[self navigationController] setViewControllers:viewControllers animated:NO]; 
    } 
} failure:^(NSURLSessionDataTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

Die Serverseite zeigt weiterhin an, dass die Parameter leer sind.

stark = D

+0

der Code zum Einstellen der Parameter sieht für mich korrekt aus. Bist du sicher, dass es Werte in 'email' und' password' gibt? –

+0

können Sie dieses Ergebnis 'Parameter' drucken –

+0

Einfache Lösung wie folgt verwenden .... http: //stackoverflow.com/questions/34561215/afnetworking-3-0-migration-how-to-post-with-headers-and -http-body/36299737 # 36299737 – Vvk

Antwort

0

der Code die Post-Anforderung für die Erstellung ist richtig wäre Jede mögliche Anleitung geschätzt. versuchte es auf meinem eigenen Server und es funktioniert wie erwartet. Überprüfen Sie daher, ob die Werte in email und password nicht nil sind und überprüfen Sie auch Ihren Servercode.

können Sie eine AFJSONSerializer verwenden, um Ihren Abschlusscode ein wenig einfacher zu machen. dann müssen Sie nicht die responseObject selbst konvertieren, da AFNetworking Pflege dieser nimmt:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
NSDictionary *parameters = @{@"email": email, @"password": password}; 
[manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSDictionary *json = responseObject; 

    if ([[json objectForKey:@"success"] intValue] != 1) { 
     UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"" message:self.error_login delegate:nil cancelButtonTitle:self.continueButton otherButtonTitles:nil]; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     [alert show]; 
    } else { 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     AccountViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"account"]; 
     NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]]; 
     [viewControllers removeLastObject]; 
     [viewControllers addObject:vc]; 
     [[self navigationController] setViewControllers:viewControllers animated:NO]; 
    } 
} failure:^(NSURLSessionDataTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+0

Die Werte beim Einchecken in Xcode sind nicht Null, aber der Server zeigt, dass nichts gepostet wird. Nehmen Sie Ihren Rat für den AFJSONResponseSerializer – SilverHood

+0

Könnten Sie vielleicht den Code Ihres Servers anzeigen? –

0

AFNetworking 3.0 POST-Methode Code. Hinweis: - Fügen Sie diese Zeile in die .h-Datei ein.

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure; 

Hinweis: - Setzen Sie diesen Code in .m-Datei.

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure { 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) { 

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:error]; 
    NSString *argString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    return argString; 
}]; 
//here 'kBaseURL' is Web services base URL and servicesName is Web Services API name, You have to pass from declaration side. 
NSString *strService = [NSString stringWithFormat:@"%@%@",kBaseURL,serviceName]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
//[SVProgressHUD showWithStatus:@"Please wait..."]; 
[SVProgressHUD show]; 
[manager POST:strService parameters:dictParams progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 


    if([responseObject isKindOfClass:[NSDictionary class]]) { 

     if(success) { 
      [SVProgressHUD dismiss]; 
      success(responseObject); 
     } 
    } 
    else 
    { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; 
     if(success) { 
      [SVProgressHUD dismiss]; 
      NSLog(@"POST Response : %@",response); 
      success(response); 
     } 
    } 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

    if(failure) { 
     [SVProgressHUD dismiss]; 
     failure(error); 
    } 
}]; 
}