2013-05-12 108 views
0

我使用此代码:https://github.com/valentinlietz/MySQL-Connect在目标c中使用MySQL查询。我使用Count(*)来检查这行是否已经存在。我使用这段代码NSLog();这本字典。代码:无法从NSDictionary获取objectForKey

for(NSArray *row in response.responseDictionary){ 

    NSLog(@"%@", row); 

} 

结果:

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

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


更新:

行:

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

词典:

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

这意味着你发送的对象“objectForKey”其实不是一个NSDictionary。请提供您用于调用此方法的实际代码。 – Stavash 2013-05-12 14:05:49

+1

你确定这是你实际使用的代码吗?如果'response.responseDictionary'是一个字典,那么你会循环查找字典中的键。您将这些键视为数组,并且调试输出表明它们是字典。这没有意义。 – Jim 2013-05-12 14:13:02

+0

[response.responseDictionary类]记录NSArray,但.responseDictionary暗示它是一个NSDictionary的权利? – sjors 2013-05-12 14:15:22

回答

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对象。

在那PHP脚本代码

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); 

表明响应是阵列字典的。

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

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

非常感谢这个作品!虽然responseArray已经是一个合适的数组。 – sjors 2013-05-14 14:55:40

+0

@sjors:也许你应该试着联系这个软件包的作者,并告诉他这个差异。 - 也许你还应该检查'isKindOfClass'这个数组是否真的是一个数组,以避免以后的应用程序崩溃。 – 2013-05-14 15:05:45

+0

这是一个NSArray,做了log [response.responseDictionary class];已经 – sjors 2013-05-14 15:38:12

相关问题