2012-02-01 4 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 

, 내가 얻을 중단 점 1에 count

  • 에 대해 다음 값 : 중단 점 2에 count = (int) 128037184 (또는 다른 임의 큰 INT)
  • : count = (int) 5

두 번 모두 int 일 것으로 예상했을 것입니다. 무슨 일이야?

+0

NSDictionary를 빌드하는 코드를 게시 할 수 있습니까? –

+0

2 번 줄에 중단 점이있을 때'count'는 정렬 된 것이지만 정확하게 계산되지는 않습니다. 그것은 임의의 int 인 이유일지도 모릅니다. –

답변

11

첫 번째 경우에는 라인이 실행되기 전에 깨고 있기 때문에 count은 임의의 데이터가 스택의 해당 위치에있을 것입니다. 디버거에서 명령을 단계적으로 수행하면 count이 더 적절한 숫자로 변경됩니다. 예상보다 더 키가 왜

는 두 번째 경우에는 잘 모르겠지만, 할 수있는 간단한 일이 단지 전체 사전을 기록하고있다 무엇이 있는지하는 것입니다 :

NSLog(@"%@", dict); 

을 그 사전에있는 모든 키와 값을 보여 주며, 숫자가 설명되어있을 수 있습니다.

+3

참고 : 한 줄에 멈추었을 때 아직 실행되지 않았습니다. – bshirley

+1

팁을 주셔서 감사 드리며 내가 찾고있는 것이 발견되었습니다. [[[dict objectForKey : @ "Items"] objectForKey : @ "Item" ] count];'또한이 dict은 온라인에서 찾은 XML 파서로 작성됩니다. 추가 항목은 두 개의 특성 (네임 스페이스와 다른 것)입니다. – Jacksonkr

5

나는 [dict count]를 사용하여 NSDictionary의 객체 수를 계산합니다.