将空Array传递给AFNetworking请求的参数

时间:2015-02-23 10:20:00

标签: ios objective-c xcode nsmutablearray afnetworking

我使用AFNetworking创建NSDictionary *parameters请求。我的一个键值对是空数组:

NSMutableArray * array = [NSMutableArray new];

当我创建了这样的参数示例时:

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

收到服务器:

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

为什么删除了带有空数组的键?

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

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

当我用NSNull()替换空数组或用一个元素NSNull()替换数组时,服务器根本不接收它。

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

3 个答案:

答案 0 :(得分: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 :(得分:0)

您可以尝试在为其分配内存时为NSArray分配容量

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

答案 2 :(得分:0)

这似乎是AFNetworking处理事情的方式的问题。我已在AFNetworking库中对此进行了修复,并在此处打开了拉取请求:

https://github.com/AFNetworking/AFNetworking/commit/642158bac875362314c7db18a73d5a0e2137fd98

我希望它获得批准,但同时可以通过修改自己的AFNetworking分支来自由使用我的实现。