2013-05-12 109 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

相關問題