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

The «арг» пары просит NSArray, но мне нужно отправить объект JSON, который выглядит следующим образом :

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

Как это можно создать? И как я помещаю этот объект в NSArray.

Update:

Я попытался это сейчас

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]; с: [self.socket emit: @ "adduser" args: @ [словарь]]; – NRaf

+0

Ну, я сделал то, что k6sandeep сказал мне, чтобы сделать и изменить тип, который, как ожидается, «args» будет в NSDictionary –

0

Вы можете использовать

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

Это позволит решить эту проблему.

Смежные вопросы