【问题标题】:Getting json token from server on iOS - OpenTok从 iOS 上的服务器获取 json 令牌 - OpenTok
【发布时间】:2014-11-17 04:49:36
【问题描述】:

我正在努力让 iOS 应用程序连接到运行 OpenTok 的节点服务器。当我硬编码值时一切正常,但我想要动态会话和令牌,因此我的问题。

我能够在服务器端成功创建一个令牌,它看起来像:

[
  {
    "_id": "*******",
    "token": "***********************",
    "sessionId": "********",
  }
]

我也可以在 iOS 应用中成功检索它:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://path/to/json"]];
NSData *theData = [NSURLConnection sendSynchronousRequest:request
                                        returningResponse:nil
                                                    error:nil];

NSMutableArray *newJSON = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingMutableContainers error:nil];

NSString* kToken = [newJSON valueForKey:@"sessionId"];
NSString* kSessionId = [newJSON valueForKey:@"token"];

我可以将值打印到控制台:

NSLog(@"Value of kToken = %@", kToken);
NSLog(@"Value of kSessionId = %@", kSessionId);

所以我知道它被正确读取,但无论如何我仍然会收到错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x14d97950

我对 iOS 比较陌生,所以也许我在这里咬的东西比我能咀嚼的还多,但任何正确方向的建议都会很棒。文档中似乎没有关于如何通过 iOS 从您的服务器正确获取令牌的任何内容。

【问题讨论】:

  • 你能告诉我你的输出json吗
  • NSArray 不响应长度,它响应计数,这意味着您尝试获取数组的长度,这就是您收到此错误的原因

标签: ios json exception unrecognized-selector


【解决方案1】:

这个 JSON:

[
  {
    "_id": "*******",
    "token": "***********************",
    "sessionId": "********",
  }
]

在数组中。

这段代码:

NSString* kToken = [newJSON valueForKey:@"sessionId"];

要求数组 (newJSON) 从其每个元素中提取 sessionId,并将它们返回到一个新数组中(这就是 valueForKey: 所做的)。所以,你会得到一个NSString,但你没有,你真的得到了一个NSArray。因此,稍后,当您将其用作字符串时,您会得到一个异常,因为该数组没有length 方法。

试试这个:

    NSString* kToken = [[newJSON objectAtIndex:0] objectForKey:@"sessionId"];

或者最好更改 JSON,使其不返回数组中的对象。

请注意,您基本上应该始终使用objectForKey: 而不是valueForKey:(好吧,直到您正确理解后者在做什么)。

【讨论】:

  • 完美修复。我没有意识到数据是一个数组。有什么建议可以帮助检测到这一点吗?比如打印出变量是什么类型的方法?
  • JSON可以直接读取,括号类型有含义。您还可以记录返回的不同容器的class,以检查您认为它们是什么。
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2021-06-06
  • 2015-05-04
  • 2012-09-20
相关资源
最近更新 更多