Почему Objective-C преобразует значения JSON в хэш кодов символов ASCII? - PullRequest
3 голосов
/ 26 августа 2010

Мы создаем приложение для чата на iPhone.

При отправке из браузера на iPhone сообщения чата JSON:

    {"content":"Hi"}

iPhone получает:

    {"content":{"0":72,"1":105,"length":2}}

Но мы намерены получить такое же точное сообщение.

Чтобы воспроизвести эту проблему, сначала установите node.js & redis. Тогда:

  • Получить код:

    git clone git://github.com/acani/acani.git
    cd acani
    git submodule update --init
    
  • Запустите Redis на порте по умолчанию.

  • С http://github.com/acani/acani-node:

    node acani-node-server.js # run node.js chat server
    # open index.html in a Google Chrome or Firefox and follow instructions.
    
  • Откройте Lovers.xcodeproj, расположенный в http://github.com/acani/acani-chat/tree/master/Lovers2/,, и измените LoversAppDelegate.m для первоначальной загрузки ChatViewController вместо HomeViewController.

    homeViewController = [[HomeViewController alloc] init]; # comment out this line
    # change the next line to:
    navigationController = [[UINavigationController alloc] initWithRootViewController:[[ChatViewController alloc] init]];
    # Then, build & run.
    

Ответы [ 2 ]

6 голосов
/ 29 августа 2010

Мы поняли это.Это был не iPhone или Objective-C вообще.Ошибка преобразования произошла на сервере node.js.Мы забыли поместить кавычки вокруг строковых значений объекта JSON, поэтому функция JavaScript JSON.stringify() преобразовывала строки, как показано выше ... за исключением того, что мы делали что-то вроде: {"content":Hi}.Когда мы изменили его на: {"content":"Hi"}, все заработало нормально.Duhh ...

1 голос
/ 26 августа 2010

Полагаю, вам нужно экранировать отправляемую строку (JSON), используя stringByAddingPercentEscapesUsingEncoding, а затем удалить ее при получении.

Первые три числа 072 - в десятичном виде это «H».Это заставляет меня думать, что «может быть потеряно из-за передачи без кодирования. Есть и другие вещи против этой теории, но я думаю, что стоит посмотреть».

...