Kyl*_*yle 5 iphone post nsdictionary asihttprequest ios
试图将嵌套参数的信息发布到rails应用程序并遇到一些麻烦.
#pragma mark - Begin Network Operations
- (void)beginNetworkOperation {
NSURL *requestURL = [NSURL URLWithString:[self retrieveURL]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:requestURL];
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
[request setShouldContinueWhenAppEntersBackground:YES];
#endif
[request setRequestMethod:@"PUT"];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request addPostValue:strClientId forKey:@"client_id"];
[request addPostValue:strAccessToken forKey:@"access_token"];
NSDictionary *assetDictionary = [NSDictionary dictionaryWithObject:self.tags forKey:@"tags"];
[request addPostValue:assetDictionary forKey:@"asset"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished:)];
[request setDidFailSelector:@selector(requestFailed:)];
[request startSynchronous];
}
Run Code Online (Sandbox Code Playgroud)
self.tags只是一个带有逗号分隔值的NSString,但是一旦到达rails服务器,就无法读取tags参数(params [:asset] [:tags]).
尝试将字典作为 JSON 字符串而不是字典对象传递。
您可以使用 iOS5 JSON 库来做到这一点,或者使用这个库来获得更高的兼容性:
https://github.com/stig/json-framework
我所做的是使用appendPostData,因为我非常确定设置标头(addRequestHeader)和使用addPostValue 不是兼容的函数。这是我的代码的示例:
ASIFormDataRequest *request;
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request appendPostData:[[SBJsonWriter new] dataWithObject:myDictionaryToPassAsAnArgument]];
Run Code Online (Sandbox Code Playgroud)
当您使用appendPostData时,您不能使用任何addPostValue。你必须把所有的东西都放进字典里。