2015-02-23 106 views
1

我使用AFNetworkingNSDictionary *parameters一起创建请求。我的一个键值对的是空数组:将空数组传递给AFNetworking请求参数

NSMutableArray * array = [NSMutableArray new]; 

当我创造的参数,例如:收到

parameters = @{"ids": array, "name": "someName"}; 

服务器:

parameters = @{"name": "someName"}; 

为什么空数组键是去掉?

经过漫长的挖掘后发现问题出在NSMutableArray的方法。

AFNetworking在某个时刻使用NSMutableArray的方法addObjectsFromArray:。在Apple documentation中没有提及,但如果数组为空,则此方法不会添加任何内容。

当我用NSNull()替换我的空阵列或带有一个元素NSNull()的阵列时,服务器根本没有收到它。

任何人都知道它是如何发生的,或者如何解决这个问题?

+0

用* [数组数]> 0替换数组?数组:[NSNull null] *,这将为您的字典添加一个空对象。确保在后端处理它。 – Pawan 2015-02-23 10:31:27

+0

但是'NSNull()'仍然被删除...可以代替它吗? – 2015-02-24 10:31:26

+0

我想你应该首先向你的服务器人确认他/她愿意接受的空对象还是空值。 – Pawan 2015-02-24 10:49:15

回答

0

我有一个类似的问题,我不得不向服务器发送一个空的数组。这是我必须为了做服务器接受我的要求:

NSNull *nullValue = [NSNull null]; 
NSArray *arrayWithNull = [NSArray arrayWithObject:nullValue]; 
[payload setObject:arrayWithNull forKey:@"ids"]; 

在我的情况下,服务器返回此响应:

ids =  (
    "" 
); 

这里使用的代码,我在另一个SO发现的问题,在这里找到: some confusions about [NSNull null],nil [duplicate]

+1

不起作用... – 2015-03-02 09:33:53

+0

你能检查发送到服务器的信息吗?您通常可以在调试器中通过抓取来自NSMutableURLRequest的HTTPBody执行此操作: po [[NSString alloc] initWithData:request.HTTPBody encoding:4] 只要确保在发送到服务器的有效负载内,有一个名为ids []的URL参数 – 2015-03-19 00:05:20

0

您可以分配能力NSArray的尝试,而你的内存分配给它

myArray = [[NSMutableArray alloc] initWithCapacity:10];