0

JSONWebサービスにデータをPOSTしようとしています。私がこれをすれば私は成功することができます:

curl -d "project[name]=hi&project[description]=yes" http://mypath.com/projects.json

私はそれを達成するためにこのようなコードを使用しようとしています:

 NSError *error = nil;
 NSDictionary *newProject = [NSDictionary dictionaryWithObjectsAndKeys:self.nameField.text, @"name", self.descField.text, @"description", nil];
 NSLog(@"%@", self.descField.text);
 NSData *newData = [NSJSONSerialization dataWithJSONObject:newProject options:kNilOptions error:&error];
 NSMutableURLRequest *url = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mypath.com/projects.json"]];
 [url setHTTPBody:newData];
 [url setHTTPMethod:@"POST"];
 NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:url delegate:self];

私のリクエストは新しいエントリを作成しますが、そのエントリは名前と説明の両方で空白です。上記のコードのNSLogは、適切な出力を生成します。

4

1 に答える 1

2

ここで2つのことを混同しています。Web サービスは JSON の結果を返しますhttp://mypath.com/projects.jsonが、curl の例では、HTTP 本文はプレーンな古いクエリ文字列フォームの本文です。これを機能させるために必要なことは次のとおりです。

NSError *error = nil;
NSString * newProject = [NSString stringWithFormat:@"project[name]=%@&project[description]=%@", self.nameField.text, self.descField.text];
NSData *newData = [newProject dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; // read docs on dataUsingEncoding to make sure you want to allow lossy conversion
NSMutableURLRequest *url = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mypath.com/projects.json"]];
[url setHTTPBody:newData];
[url setHTTPMethod:@"POST"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:url delegate:self];

これは、上で行った curl 呼び出しと同等です。または、curl を使用して (ObjC コード例が行っていたように) JSON を投稿する場合は、次のようにします。

curl -d '"{\"project\":{\"name\":\"hi\",\"project\":\"yes\"}}"' -H "Content-Type: application/json" http://mypath.com/projects.json

于 2012-04-20T22:24:17.537 に答える