如何在POST API调用中将字典设置为值 - 目标C.

时间:2016-08-12 07:24:01

标签: ios objective-c parameters nsdictionary jsonmodel

我正在进行API调用,其中参数为:

{
      name : XYZ,
      marks : { maths : 34 }
}

我正在使用JSON model进行API调用并处理响应。

以下是我如何制作params Dict:

NSMutableDictionary *paramsDict = [[NSMutableDictionary alloc] init];

NSMutableDictionary *marksDict = [[NSMutableDictionary alloc] init];
[marksDict setObject:"34" forKey:"maths"];

[paramsDict setObject:marksDict forKey:@"marks"];

[paramsDict setObject:@"XYZ" forKey:@"name"];

这是我的API CALL

APIManager *apimanager = [[APIManager alloc] init];
apimanager.delegate = self;

[apimanager getServerDataWithParam:paramsDict apiMethodType:kAPIMethodTypePOST andMapperClass:[StudentMarks class]];

我的应用程序崩溃给了我这个崩溃日志

Assertion failure in +[JSONHTTPClient urlEncode:], /Users/Documents/JSONHTTPClient.m:122
2016-08-12 12:46:16.653 ClassMgmt[30227:1338857] *** Terminating app due to uncaught exception 
'NSInternalInconsistencyException', reason: 'request parameters can be only of NSString or NSNumber classes.
'{   maths = 34; }' is of class __NSDictionaryM.'

我不想使用以下内容将NSDictionary转换为NSString

[NSString stringWithFormat:@"@", aDictionary];

他们以任何其他方式将NSDictionary作为POST请求中的值作为参数发送吗?

2 个答案:

答案 0 :(得分:0)

长故事短; HTTP POST参数只能是没有层次结构的名称/值对。

另一方面,如果你想发布JSON,那是HTTP POST主体的一部分,而不是参数。

答案 1 :(得分:0)

NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil]
NSString *paramsjsonStr = [[NSString alloc] initWithData: jsonData encoding:NSUTF8StringEncoding]