【问题标题】:Can't get objectForKey from NSDictionary无法从 NSDictionary 获取 objectForKey
【发布时间】:2013-05-12 13:58:28
【问题描述】:

我正在使用此代码:https://github.com/valentinlietz/MySQL-Connect 在目标 c 中使用 MySQL 查询。我使用 Count(*) 来检查该行是否已经存在。

我把这段代码用于 NSLog();这本词典。代码:

for(NSArray *row in response.responseDictionary){

    NSLog(@"%@", row);

}

结果:

{
"" = "<null>";
"COUNT(*)" = 0;
}

但是当我使用[response.responseDictionary objectForKey:@"COUNT(*)"]; 时,它会返回发送到实例的未识别选择器。


更新:

行:

Row: ( { "" = "<null>"; "COUNT()" = 0; } )

字典:

Row: { "" = "<null>"; "COUNT()" = 0; }

【问题讨论】:

  • 这意味着您发送的对象“objectForKey”实际上不是 NSDictionary。请提供您用于调用此方法的实际代码。
  • 您确定这是您实际使用的代码吗?如果response.responseDictionary 是字典,那么您将遍历字典中的键。您将键视为数组,调试输出表明它们是字典。这没有任何意义。
  • [response.responseDictionary class] 记录 NSArray,但 .responseDictionary 暗示它是 NSDictionary 对吧?
  • 这里有点不对劲。您将上面的“结果:”列表(这似乎是一个 NSDictionary,虽然很奇怪)作为 row 的表观值给出,显然是 NSArray 的一个元素,但随后您将 row 扔掉(这是,顺便说一句,错误声明为 NSArray)并尝试访问原始对象response.responseDictionary,就好像它是字典一样。我认为你真的需要退后一步,试着理解你在做什么。
  • 我确实尝试了一些不同的东西,并在不同的元素上回答了它们。它是 NSArray 的一部分,但如果正确,则 NSArray 包含 NSDictionary,但我仍然无法获取 ObjectAtIndex。此外,这只是库中的一个代码示例。

标签: ios objective-c


【解决方案1】:

我没有参与过那个项目,但是从https://github.com/valentinlietz/MySQL-Connect/blob/master/MySQL.m 看来,response.responseDictionary 是结果 将脚本 https://github.com/valentinlietz/MySQL-Connect/blob/master/mysql.php 的 JSON 响应转换为 Foundation 对象。

还有代码

while($row = mysql_fetch_array($query))
{ 
for($i = 0; $i < 50; $i++) {
     $arr2[$fields[$i]] = $row[$fields[$i]]; 
}
 array_push($return_arr, $arr2);

}
echo json_encode($return_arr);

在那个 PHP 脚本中显示响应是一个字典数组

所以如果我是正确的,responseDictionary 属性的名称和类型选择不当,因为它不是NSDictionary,而是NSArray,其中每个对象都是NSDictionary, 并且以下应该有效:

NSArray *responseArray = (NSArray *)response.responseDictionary;
NSLog(@"count = %@", [[responseArray objectAtIndex:0] objectForKey:@"COUNT(*)"]);

【讨论】:

  • 非常感谢这个工作!虽然 responseArray 已经是一个合适的数组。
  • @sjors:也许你应该尝试联系那个包的作者,告诉他这个差异。 - 或许您还应该向isKindOfClass 确认这确实是一个数组,以避免以后应用程序崩溃。
  • 是一个NSArray,做了log [response.responseDictionary class];已经
  • 是的,我会给他发电子邮件;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多