2014-12-29 116 views
0

我是iOS新手,希望找到一些幫助。我連接到我的套接字服務器,但遇到問題。發送JSON對象ios

繼承人如何發出:

if (self.socketIsConnected) 
{ 
    [self.socket emit:(NSString HERE) args:@[(NSArray HERE)]]; 
} 

繼承人是我的嘗試:

if (self.socketIsConnected) 
{ 
    NSDictionary *deviceDic = @{@"username": @"drew", @"chatHash":@"FJHE8"}; 
    [self.socket emit:@"adduser" args:@[[NSString stringWithFormat: @"%@", deviceDic]]]; 
} 

的「ARGS」參數要求一個的NSArray,但我需要發送一個JSON對象,看起來像這樣:

{"username": "drew", "chatHash":"FJHE8"} 

我該如何創建?我怎麼把這個對象放在NSArray中。

更新:

我想這現在

NSArray *keys = [NSArray arrayWithObjects:@"username", @"chatHash", nil]; 
    NSArray *objects = [NSArray arrayWithObjects:@"drew", @"value2", nil]; 
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects 
                  forKeys:keys]; 
    [self.socket emit:@"adduser" args:dictionary]; 

,我看着在服務器上。它拋出我的服務器拋出異常。它接收的唯一數據是:

用戶名

+0

什麼是套接字,您正在使用哪個庫類? – Sandeep

+0

圖書館是SIOSocket。只需要幫助創建一個JSON對象,但正確的方式。 –

+0

我認爲你需要對NSArray應該看起來像什麼有點充實。你的JSON對象類似於更多的NSDictionary。 –

回答

0

看來,你使用SIOSocket。該文檔不是很清楚,但查看emit函數的源代碼(https://github.com/MegaBits/SIOSocket/blob/master/SocketIO/Source/SIOSocket.m),只需傳遞一個NSArray,其中第一個參數是NSDictionary。字典將被框架序列化爲JSON對象。

您可以在emit調用中有多個參數。參數中每個參數的類型取決於您傳遞的數組中的對象的類型。如果你傳遞一個字典,它會將它轉換爲JSON對象,將數組轉換爲數組,將數字轉換爲數字,將字符串轉換爲字符串。

+0

我也喜歡你對我的問題更新的意見。 –

+0

你可以嘗試替換:[self.socket emit:@「adduser」args:dictionary]; with:[self.socket emit:@「adduser」args:@ [dictionary]]; – NRaf

+0

嗯,我做了k6sandeep告訴我要做的事情,並將「args」預期的類型改爲NSDictionary –

0

您可以使用

 NSDictionary *subArgs = @{@"state" : @true}; 
    [self.socket emit:@"adduser" args:@[subArgs]]; 

這將解決這個問題。