2015-02-23 84 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]; 
相關問題