2015-03-03 5 views
0

Я пытаюсь сделать рекламный пост. Я настраиваю все, поскольку я думал, что это будет правильно, однако, когда я нажимаю бозон «cadastrar anuncio», он возвращает эту ошибку «получил 422». уже изученный об ошибке, однако, не мог исправить вообще. кто-то здесь прошел через это?NSLocalizedDescription = Ожидаемый код состояния в (200-299), получил 422}

это мой веб-сервис

#import "JVWebService.h" 
#import <RestKit/RestKit.h> 
#import "AppDelegate.h" 
#import "JVUtils.h" 
#import "Ads.h" 

static NSString *kServerURL = @"http://localhost:3000"; 

@interface JVWebService() 
@property (strong, nonatomic) RKObjectManager *restKitObjectManager; 
@property (strong, nonatomic) NSDictionary *adAttributes; 
@property (strong, nonatomic) NSDictionary *postAdAttributes; 
@property (strong, nonatomic) NSDictionary *userAttributes; 
@property (strong, nonatomic) NSDictionary *postUserAttributes; 
@end 

#define kSuccessStatusCode RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful) 

@implementation JVWebService 

+ (instancetype)sharedService { 
    static JVWebService *sharedService = nil; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     sharedService = [[self alloc] init]; 

     [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 
     sharedService.restKitObjectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:kServerURL]]; 
     [sharedService.restKitObjectManager.HTTPClient setAuthorizationHeaderWithUsername:[[[AppDelegate sharedDelegate] currentUser] email] 
                       password:[[[AppDelegate sharedDelegate] currentUser] password]]; 
    }); 
    return sharedService; 
} 

#pragma mark - User 

- (void)getUserForEmail:(NSString *)email andPassword:(NSString *)password { 
    RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:User.class]; 
    [objectMapping addAttributeMappingsFromDictionary:self.userAttributes]; 

    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
    [requestMapping addAttributeMappingsFromDictionary:self.postUserAttributes]; 

    NSString *path = @"https://stackoverflow.com/users/sign_in.json"; 

    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping 
                        objectClass:User.class 
                        rootKeyPath:@"user" 
                         method:RKRequestMethodAny]; 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objectMapping 
                          method:RKRequestMethodAny 
                         pathPattern:path 
                          keyPath:@"user" 
                         statusCodes:kSuccessStatusCode]; 
    [self.restKitObjectManager addRequestDescriptor:requestDescriptor]; 
    [self.restKitObjectManager addResponseDescriptor:responseDescriptor]; 

    User *user = [User new]; 
    user.email = email; 
    user.password = password; 

    [[NSUserDefaults standardUserDefaults] setObject:[[NSUUID UUID] UUIDString] forKey:@"authencity_token"]; 
    NSDictionary *params = @{@"authenticity_token" : [[NSUserDefaults standardUserDefaults] objectForKey:@"authencity_token"]}; 

    [self.restKitObjectManager.HTTPClient setAuthorizationHeaderWithUsername:email password:password]; 
    [self.restKitObjectManager postObject:user path:path parameters:params success:^(RKObjectRequestOperation *operation, 
                        RKMappingResult *result){ 
     User *user = (User *)result.array.firstObject; 
     user.password = password; 
     [[AppDelegate sharedDelegate] login:user]; 

     [[AppDelegate sharedDelegate] setLoggedViaFacebook:NO]; 

     if ([self.serviceDelegate respondsToSelector:@selector(successfulRequestDidReturnObject:)]) 
      [self.serviceDelegate successfulRequestDidReturnObject:user]; 

    } failure:^(RKObjectRequestOperation *operation, NSError *error){ 
     RKLogError(@"Operation failed with error: %@", error); 

     if ([self.serviceDelegate respondsToSelector:@selector(requestDidFailWithError:)]) 
      [self.serviceDelegate requestDidFailWithError:error]; 
    }]; 

    [self.restKitObjectManager removeResponseDescriptor:responseDescriptor]; 


    } 





- (void)postAd:(Ads *)ad { 
    NSString *path = @"/ads.json"; 

    RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:Ads.class]; 
    [objectMapping addAttributeMappingsFromDictionary:self.adAttributes]; 

    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
    [requestMapping addAttributeMappingsFromDictionary:self.postAdAttributes]; 

    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping 
                        objectClass:Ads.class 
                        rootKeyPath:@"ad" 
                         method:RKRequestMethodAny]; 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objectMapping 
                          method:RKRequestMethodAny 
                         pathPattern:path 
                          keyPath:@"ad" 
                         statusCodes:kSuccessStatusCode]; 

    [self.restKitObjectManager addRequestDescriptor:requestDescriptor]; 
    [self.restKitObjectManager addResponseDescriptor:responseDescriptor]; 

    NSMutableURLRequest *urlRequest = [self.restKitObjectManager multipartFormRequestWithObject:ad method:RKRequestMethodPOST path:path parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

//  NSArray *photosArray = ad.photos[0]; 
//  for(int i = 0; i < photosArray.count; i++) { 
//    
//   NSString *name = [NSString stringWithFormat:@"ad[photos_attributes][%i][picture]", i]; 
//   NSString *fileName = [NSString stringWithFormat:@"photo%i.jpg", i]; 
//   [formData appendPartWithFileData:UIImagePNGRepresentation(photosArray[i]) 
//          name:name 
//         fileName:fileName 
//         mimeType:@"image/jpg"]; 
//  } 
    }]; 

    RKObjectRequestOperation *operation = [self.restKitObjectManager objectRequestOperationWithRequest:urlRequest 
                           success:^(RKObjectRequestOperation *operation, RKMappingResult *result) { 
                            if ([self.serviceDelegate respondsToSelector:@selector(successfulRequestDidReturnObject:)]) 
                             [self.serviceDelegate successfulRequestDidReturnObject:nil]; 

                           } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
                            if ([self.serviceDelegate respondsToSelector:@selector(requestDidFailWithError:)]) 
                             [self.serviceDelegate requestDidFailWithError:error]; 
                           }]; 
    [self.restKitObjectManager enqueueObjectRequestOperation:operation]; 

    [self.restKitObjectManager removeRequestDescriptor:requestDescriptor]; 
    [self.restKitObjectManager removeResponseDescriptor:responseDescriptor]; 
} 



- (NSDictionary *)adAttributes { 
    return @{ 
      @"id" : @"_id", 
      @"title" : @"title", 
      @"price" : @"price", 
      @"local" : @"local", 
      @"description" : @"especification" 
//    @"categories" : @"categories", 
//    @"photos" : @"photos", 
//    @"latitude" : @"latitude", 
//    @"longitude" : @"longitude" 
      }; 
} 

- (NSDictionary *)postAdAttributes { 
    return @{ 
      @"_id" : @"id", 
      @"title" : @"title", 
      @"price" : @"price", 
      @"local" : @"local", 
      @"especification" : @"description" 
//    @"categories" : @"category_ids", 
//    @"user_id" : @"user_id", 
//    @"latitude" : @"latitude", 
//    @"longitude" : @"longitude" 
      }; 
} 

- (NSDictionary *)userAttributes { 
    return @{ 
      @"id" : @"_id", 
      @"email" : @"email", 
      @"name" : @"name", 
      @"avatar" : @"profileImageUrl", 
      @"phone" : @"phone", 
      @"password" : @"password", 
      @"contact_pref" : @"communicationPreference", 
      @"products_alerts" : @"productsAlerts" 
      }; 
} 

- (NSDictionary *)postUserAttributes { 
    return @{ 
      @"_id" : @"id", 
      @"email" : @"email", 
      @"name" : @"name", 
      @"phone" : @"phone", 
      @"password" : @"password", 
      @"password" : @"password_confirmation", 
      @"communicationPreference" : @"contact_pref" 
      }; 
} 
@end 

это мой NewAdViewController:

#import "NewAdViewController.h" 
#import "Ads.h" 
#import "JVUtils.h" 
#import "JVWebService.h" 
#import "AppDelegate.h" 

@interface NewAdViewController() 

@end 

@implementation NewAdViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

} 

- (IBAction)signUp:(id)sender { 


    if (self.titleField.text.length <= 0) { 
     [JVUtils showMessage:@"Falta algo ae eem =D =D fdp." withTitle:@"Opa!"]; 
    } else if (self.priceField.text.length <= 0) { 
     [JVUtils showMessage:@"Falta algo ae eem =D =D fdp" withTitle:@"Opa!"]; 
    } else if (self.localField.text.length <= 0) { 
     [JVUtils showMessage:@"Falta algo ae eem =D =D fdp" withTitle:@"Opa!"]; 
    } else if (self.descriptionField.text.length <= 0) { 
     [JVUtils showMessage:@"Falta algo ae eem =D =D fdp" withTitle:@"Opa!"]; 
    } else { 
      Ads *newAd = [Ads new]; 
      newAd.title = self.titleField.text; 
      newAd.price = self.priceField.text; 
      newAd.local = self.localField.text; 
      newAd.especification = self.descriptionField.text; 


      [[JVWebService sharedService] setServiceDelegate:self]; 
      [[JVWebService sharedService] postAd:newAd]; 

     } 
    } 


- (void)successfulRequestDidReturnObject:(NSObject *)object { 

    [JVUtils showMessage:@"Anuncio cadastrado =D" withTitle:@"hadoukeeeen !"]; 

    [[AppDelegate sharedDelegate] setCurrentUser:(User *)object]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 


} 

- (void)requestDidFailWithError:(NSError *)error { 

    [JVUtils showMessage:error.localizedDescription withTitle:@"Errohue"]; 
} 


-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
} 





@end 

Вот деталь из журнала сервера

работы POST "/ads.json" для 127.0.0.1 в 2015-03-03 18:06:15 -0300 Обработка AdsController # create as JSON Параметры: {"ad" => {"description" => ewewe "," id "=>" "," local "=>" ew ", " price "=>" 25 "," title "=>" titulp "}} Пользовательская загрузка (0,6 мс) пользователей SELECT. * ОТ пользователей WHERE users.id = 2 ORDER BY users.id ASC LIMIT 1 Непропущенные параметры: id (0.2ms) BEGIN (0.6ms) ROLLBACK Завершено 422 Непроизведенный Entity in 10ms (Просмотров: 0.3ms | ActiveRecord: 1,4ms)

+0

422 указывает, что ваши данные были некорректны - вы должны проверить журналы своего сервера, чтобы узнать, есть ли там какая-либо информация. Возможно, пароль не соответствует требованиям сложности? – Paulw11

+0

Я не добавляю объект, который использует пароль. Я регистрирую простое объявление, содержащее описание и название цены. как приложение для продажи №. Я использовал подобный метод с моей регистрацией пользователей. Я думаю, что это проблема талв, но, похоже, не найти пути решения. –

+0

Извините, я не понял - вы отправили много кода - я увидел первую операцию, которая была пользователем. В будущем лучше всего упростить свой вопрос, включив только * соответствующий * код, однако мой совет по-прежнему действителен - 422 указывает, что сервер не был доволен данными, которые вы отправили. Вам нужно проверить значения, которые вы отправляете, и искать более подробные сведения о журналах сервера. – Paulw11

ответ

0

Код состояния 422 указывает, что ваши данные были некорректными - запрос был сформирован, но данные не могли быть обработаны.

Глядя на журнал с сервера вы можете увидеть, что id пуст, и появляется сообщение об ошибке Unpermitted parameters: id

Вам нужно определить, почему идентификатор пуст, и исправить это, прежде чем отправить запрос.

Смежные вопросы