IOS - Как я могу проверить JSON NSData, который создает SBJson? - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь отправить простой JSON в RESTful-сервис.Я хочу сформировать строку json, которая принимает следующую форму:

{username:"someuser",password:"somepassword"}

Мой POST продолжает сбой на сервере, жалуясь, что значения POST не существуют.Однако тот же сервис работает нормально, если я создаю тестовую реализацию JS.Так что я почти уверен, что проблема заключается в реализации моего клиента SBJson.

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                          userName,@"username",
                          password, @"password",
                          nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];    

jsonData, похоже, имеет размер, но он пытается сериализовать его с SBJson, но он терпит неудачу и я получаю ноль.

NSString *test = [writer stringWithObject:jsonData]; // returns nil

Я пытаюсь опубликовать вышеупомянутое в NSMutableURLRequest.Вот моя реализация, если это помогает дать контекст:

-(void)registerUserName:(NSString *)userName andPassword:(NSString *)password{
responseData = nil;
responseData = [NSMutableData data];
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                          userName,@"username",
                          password, @"password",
                          nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
NSString *test = [writer stringWithObject:jsonData]; //always nil
NSURL *url = [[NSURL alloc] initWithString:@"http://localhost/~user/app_web/index.php/user/create"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request addValue:@"form-data" forHTTPHeaderField:@"Content-Disposition"];
[request setHTTPBody:jsonData];
[[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
currentRequestType = REGISTER_USER;
NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self]; 

Спасибо!

update

Используя предложения ниже, я сейчас делаю это:

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                              userName,@"username",
                              password, @"password",
                              nil];



     NSString *jsonString = [userDict JSONRepresentation];
    NSData *jsonData = [jsonString dataUsingEncoding];
    [request setHTTPBody:jsonData];
        [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
        currentRequestType = REGISTER_USER;
        NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self];

К сожалению, мои опубликованные значения все еще не найдены на сервере.Я думаю, что-то не так с моим NSMutableURLRequest ..

Я использую CodeIgniter на сервере.Действие выглядит так:

public function create(){
    if($this->input->post('username') && $this->input->post('password')){
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $this->load->model('User_model','users');
        $status = $this->users->add_user($username,$password);
        if($status){
            echo json_encode(array('success'=>true));
        } else{
            echo json_encode(array('success'=>false));
        }
    }
     echo json_encode(array('success'=>false)); // when posting I arrive here
}

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Для сериализации словаря userDict вызовите следующий метод.

NSString* jsonString = [userDict JSONRepresentation];

Если вы хотите представление NSData, вы можете использовать следующий метод

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];
1 голос
/ 18 февраля 2012

попробуйте это:

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      userName,@"username",
                      password, @"password",
                      nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *test = [writer stringWithObject:userDict]; 

не забудьте выпустить их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...