3

我们正在构建一个 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.
    
  • 打开位于http://github.com/acani/acani-chat/tree/master/Lovers2/的 Lovers.xcodeproj,并更改 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.
    
4

2 回答 2

6

我们想通了。它根本不是 iPhone 或 Objective-C。转换错误发生在 node.js 服务器上。我们忘记在 JSON 对象的字符串值周围加上引号,所以JSON.stringify()JavaScript 函数正在转换字符串,如上所示......除了我们正在做类似的事情:{"content":Hi}. 当我们将其更改为:{"content":"Hi"}时,它运行良好。呃……

于 2010-08-29T04:06:17.743 回答
1

我的猜测是您需要使用 stringByAddingPercentEscapesUsingEncoding 转义正在发送的字符串(JSON),然后在收到时取消转义。

前三个数字是 072 - 在十进制中是“H”。这让我觉得一个“可能会因为没有编码的传输而丢失。还有其他反对这个理论的东西,但我认为它值得一看。

于 2010-08-26T05:56:30.530 回答