我使用AFNetworking
创建NSDictionary *parameters
请求。我的一个键值对是空数组:
NSMutableArray * array = [NSMutableArray new];
当我创建了这样的参数示例时:
parameters = @{"ids": array, "name": "someName"};
收到服务器:
parameters = @{"name": "someName"};
为什么删除了带有空数组的键?
经过长时间的挖掘后发现问题出在NSMutableArray
的方法上。
AFNetworking
在某个时刻使用NSMutableArray
的方法addObjectsFromArray:
。 Apple documentation中没有提到它,但如果数组为空,则此方法不会添加任何内容。
当我用NSNull()
替换空数组或用一个元素NSNull()
替换数组时,服务器根本不接收它。
任何人都知道它是如何发生的,或者如何解决这个问题?
答案 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分支来自由使用我的实现。