Iphone IOS-如何检查SBJson创建的JSON NSData?

Iphone IOS-如何检查SBJson创建的JSON NSData?,iphone,objective-c,ios,codeigniter,Iphone,Objective C,Ios,Codeigniter,我试图向RESTful服务发布一些简单的JSON。我想形成一个json字符串,其形式如下: {username:"someuser",password:"somepassword"} 我的帖子在服务器上不断失败,抱怨发布的值不存在。但是,如果我创建一个JS测试实现,同样的服务也可以正常工作。所以我很确定问题出在我的SBJson客户端实现上 NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:

我试图向RESTful服务发布一些简单的JSON。我想形成一个json字符串,其形式如下:

{username:"someuser",password:"somepassword"}
我的帖子在服务器上不断失败,抱怨发布的值不存在。但是,如果我创建一个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]; 
谢谢

更新

根据以下建议,我现在正在这样做:

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];
不幸的是,在服务器上仍然找不到我发布的值。我想我的NSMutableUrl请求一定有问题

我在后端使用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
}

要序列化字典
userDict
,请调用以下方法

NSString* jsonString = [userDict JSONRepresentation];
如果需要NSData表示,可以使用以下方法

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];

要序列化字典
userDict
,请调用以下方法

NSString* jsonString = [userDict JSONRepresentation];
如果需要NSData表示,可以使用以下方法

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];
试试这个:

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      userName,@"username",
                      password, @"password",
                      nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *test = [writer stringWithObject:userDict]; 
不要忘记释放它们

尝试以下方法:

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

别忘了释放它们

谢谢。。这确实返回了我想要的json字符串。但是,setHTTPBody:将NSData作为参数。我已将字符串转换为NSData。问题依然存在。这一定是由于我的要求引起的。谢谢。。这确实返回了我想要的json字符串。但是,setHTTPBody:将NSData作为参数。我已将字符串转换为NSData。问题依然存在。这一定是由于我请求中的其他内容造成的。谢谢,这也会给我一个JSON字符串。这个应用程序正在使用ARC。谢谢,这也会给我一个JSON字符串。此应用程序正在使用ARC。