2014-12-29 76 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]]; 

这将解决这个问题。