2012-02-01 75 views
3
{ 
    Items = { 
     Item = { 
      text = "item 1"; 
     } 
     Item = { 
      text = "item 2"; 
     } 
     Item = { 
      text = "item 3"; 
     } 
    } 
} 

上面是我的NSDictionary的一個例子。記住這個下一個片段。NSDictionary長度計數是錯誤的

NSDictionary *dict = {the afore mentioned dictionary is here} 
int count = [[[dict objectForKey:@"Items"] allKeys] count]; // Breakpoint here 
NSLog(@"%i", count); // Breakpoint here 

在我的斷點,我得到了count

  • 以下值在斷點1:count = (int) 128037184(或其他一些隨機的,大INT)
  • 在斷點2:count = (int) 5

我本來期望兩次的int都是3。這是怎麼回事?

+0

你可以發佈你建立NSDictionary的代碼嗎? – 2012-02-01 17:44:30

+0

當你在第2行有斷點時,'count'可能是準備好的,但並不準確計算。這可能是一個隨機int的原因,我猜? – 2012-02-01 17:45:53

回答

11

在第一種情況下,您在執行該行之前就已經中斷了,因此count將會有任何隨機數據碰巧位於堆棧中的該位置。如果您在調試器中跳過該指令,則會看到count更改爲更合理的數字。

在第二種情況下,我不知道爲什麼你有更多的按鍵比你期望的,但簡單的事是隻記錄了整個詞典,看看那裏有什麼:

NSLog(@"%@", dict); 

那會向你展示字典中的所有鍵和值,這可能解釋你得到的數字。

+3

還注意:當你停在一條線,它還沒有被執行 – bshirley 2012-02-01 17:51:54

+1

感謝您的提示,我發現我正在尋找的是'[[[objectType]:'Items'] objectForKey:@「Item」 ] count];'此外,這個字典是從我在網上找到的XML解析器構建的。額外的項目是兩個屬性(命名空間和其他)。 – Jacksonkr 2012-02-01 18:13:48

5

我使用[字典計數],它給你在NSDictionary中的對象數。